PDA

View Full Version : مشکل dll ها با برنامه تحت شبکه



Payman62
یک شنبه 13 آبان 1386, 22:21 عصر
سلام.
من یه برنامه نوشتم که تحت شبکه کار میکنه. یعنی فایل ها به صورت کلاینت سرور به هم وصل میشن و کار میکنن. تعدادی هم dll نوشتم که برنامه برای اجرای بعضی دستورات بهشون نیاز داره.
برنامه رو سیستم خودم به خوبی کار میکنه. اگه dll ها نباشن سرور به کلاینت پیغام میده و کلاینت dll ها رو برای سرور آپلود میکنه و بعد هم برنامه بدون مشکل کار میکنه. ولی من ممکنه مجبور شم بعد از اتمام کار dll هارو پاک کنم. ولی اگه از یه dll استفاده کنم دیگه نمیتونم پاکش کنم. تا زمانی که سرور اجراست نمیشه اون dll که ازش استفاده شده رو پاک کرد. حالا چطور dll هارو پاک کنم؟

مشکل دوم اینه که برنامه رو بردم تو یه شبکه محلی تست کردم. بدون مشکل کار کرد. دستوراتی که نیاز به dll داشتن پیغام رو به کلاینت میفرستادن و کلاینت هم فایل ها رو برای سرور میفرستاد. ولی بعد از ارسال dll ها باز اون دستوراتی که وابسته به dll ها بودن کار نمیکردن. dll ها بعد از ارسال تو system32 میشینن. مشکل کجاست؟

Payman62
دوشنبه 14 آبان 1386, 19:06 عصر
سلام.
چی شد پس کسی بلد نیست؟

hamed_F
سه شنبه 15 آبان 1386, 08:41 صبح
سلام
من شبیه این کار را توی یک شبکه خیلی گسترده انجام دادم و به همین مشکل خوردم
اون زمان به سه تانتیجه رسیدم
1-کلید dll برای اینکه برنامه بتونه از اون استفاده کنه باید توی ریجیستری نوشته بشود
و به دلیل اینکه نوشتن توی ریجستری از توان یک poweruser برخواهد آمد ولی پاک کردن آن تنها توسط admin صورت می گیردولاغیر (در سرورهای با هسته nt) این مشکل وجود دارد
2-فایل های dll تا زمانی که برنامه اجراست (حتی اگر از dll استفاده نشود) به عنوان یکی از ریسورس ها برنامه تحت اختیار برنامه است و برنامه یا فایل ضمیمه ای که باز است پاک نمی شود
بنا براین پیشنهاد می کنم
اولا از یک برنامه دیدبان روی سرور استفاده کن و به اون پیغام بده برنامه رو end کنه
بعد با استفاده از دستور regsvr32.exe کلید dll هاتو از توی ریجیستری بردار
درآخر به برنامه دیدبان بگو برنامتو دوباره اجرا کنه
البته این سه کار می شه بصورت خودکار انجام بشه و برای اون دستور از سمت کلاینت به سرور ارسال نکنی و ...

Payman62
سه شنبه 15 آبان 1386, 14:43 عصر
سلام.
اگه قبل استفاده از dll با regsvr32.exe رجیسترش کنم مشکل استفاده کردن ازش حل میشه؟
حالا پاک کردنش بماند.

Payman62
چهارشنبه 16 آبان 1386, 00:46 صبح
سلام.
با رجیستر کردن مشکل حل میشه. ولی راهی غیر رجیستر کردن هست؟

hamed_F
چهارشنبه 16 آبان 1386, 19:22 عصر
سلام ببخشید ماموریت بودم نتونستم به موقع جواب بدم
توی سایت خود ماکروسافت برو اونجا تنها راه رو ریجیستری عنوان کرده
ولی از اون برنامه های غیر استاندارد که میان فایل های dll و ocx رو با خود فایل exe یکی میکنن هم می تونی استفاده کنی ولی من اصلا پیشنهاد نمی کنم چون خیلی وقتا کل کامپیوتر تعطیل میشه

‍Peter Norton
چهارشنبه 16 آبان 1386, 22:44 عصر
برای پاک کردن DLL هایی که قبلاً رجیستر شدن کافیه از سوییچ -u خود regsvr32 استفاده کنی بعداً می تونی اونا رو پاک کنی.
تقریباً راهی جز رجیستر کردن (یا با regsvr32 یا با توابعی که در برنامه Setup ساز Vb هم وجود داره ) نداری برای رجیستر کردن بی سروصدای فایلهای از سوییچ -s استفاده کن.
حامد درست میگه برنامه هایی برای این کار هست ولی یا کرکش نیست یا تحت بعضی نسخه ها با گیر کار می کنه.
البه یه راه خیلی خیلی پیچیده و سنگین داره که از حوصله بحث خارجه و کاملاً غیرمنطقیه!