PDA

View Full Version : register



arsalansalar
دوشنبه 17 دی 1386, 16:29 عصر
من یک کامپوننت دارم که برای استفاده از آن باید register شود.
آیا می شود set up یا auto run نوشت که خودش این کار را انجام دهد؟
اگر جواب بله است چگونه؟

sinpin
دوشنبه 17 دی 1386, 22:39 عصر
بله میشه -
خودتون هم میتونید دستی اون رو رجیستر کنید به این شکل:
از طریق دستور خط فرمان : RegSvr32


RegSvr32.exe
The regsvr32.exe command-line tool registers dll and ActiveX controls on a system. You can manually use the Regsvr32.exe (Windows.Start - Run) to register and unregister OLE controls such as dynamic link library (DLL) or ActiveX Controls (OCX) files that are self-registerable.
When you use Regsvr32.exe, it attempts to load the component and call its DLLSelfRegister function. If this attempt is successful, Regsvr32.exe displays a dialog indicating success.

RegSvr32.exe has the following command-line options:

Regsvr32 [/u] [/s] [/n] [/i[:cmdline]] dllname
/s - Silent; display no message boxes
/u - Unregister server
/i - Call DllInstall passing it an optional [cmdline];
when used with /u calls dll uninstall
/n - do not call DllRegisterServer; this option must
be used with /i


و بدون RegSvr32 هم میشه. این لینک رو ببینید :
http://www.megasecurity.org/Info/Sennaspy08022001.html

arsalansalar
سه شنبه 18 دی 1386, 08:30 صبح
دوست عزیز من عین عبارت زیر را در فرم لود کپی کردم ولی از همه قسمتهایش اشکال می گیرد و خطایش این است که هیچکدام را نمی شناسد.


rundll32(WCaptureX.dll, DLLRegisterServer)

من در واقع می خواهم زمانی که فرمم لود شد کامپوننتها register شوند

arsalansalar
چهارشنبه 19 دی 1386, 07:57 صبح
من کارم یک کم گیر هست.
کسی نیست کمک ما کند؟

sinpin
چهارشنبه 19 دی 1386, 12:28 عصر
من کارم یک کم گیر هست.
کسی نیست کمک ما کند؟
:چشمک:
و خداوند search را آفرید :

System.Diagnostics.Process.Start("RegSvr32", "msdxm.ocx")

http://vbnetsample.blogspot.com/2007/08/start-and-kill-process.html (http://vbnetsample.blogspot.com/2007/08/start-and-kill-process.html)

sinpin
چهارشنبه 19 دی 1386, 12:36 عصر
دوست عزیز من عین عبارت زیر را در فرم لود کپی کردم ولی از همه قسمتهایش اشکال می گیرد و خطایش این است که هیچکدام را نمی شناسد.
خب حق داره چون اون دستور vb نبود.


من در واقع می خواهم زمانی که فرمم لود شد کامپوننتها register شوند
بهتره توی Form Load (و کلا UI) اینکار رو نکنید. چون ممکنه اون فرم هم از کامپوننتها استفاده کرده باشه. یک کلاس یا ماژول واسه اینکار تعبیه کنید.

arsalansalar
چهارشنبه 19 دی 1386, 19:38 عصر
:چشمک:
و خداوند search را آفرید :

System.Diagnostics.Process.Start("RegSvr32", "msdxm.ocx")

http://vbnetsample.blogspot.com/2007/08/start-and-kill-process.html (http://vbnetsample.blogspot.com/2007/08/start-and-kill-process.html)

یعنی این کد را در فرم لودم تایپ کنم؟

arsalansalar
چهارشنبه 19 دی 1386, 19:41 عصر
خب حق داره چون اون دستور vb نبود.


بهتره توی Form Load (و کلا UI) اینکار رو نکنید. چون ممکنه اون فرم هم از کامپوننتها استفاده کرده باشه. یک کلاس یا ماژول واسه اینکار تعبیه کنید.
من می خواهم برای تست هم شده این کار را بکنم.
اگه می شود کد vb آن را بدهید و لطفا یک توضیح کوچک بدهید که قدم قدم چکار کنم.
چون من با این مورد تقریبا هیچ آشنایی ندارم.
با تشکر از لطف شما

sinpin
چهارشنبه 19 دی 1386, 21:39 عصر
یعنی این کد را در فرم لودم تایپ کنم؟
بله - این کد vb است.
اینکه کجا اون رو قرار بدید به خودتون بستگی داره ولی بنظر من بهتره قبل از لود اولین فرم باشه.
در ضمن به جای msdxm.ocx آدرس و نام OCX یا DLL مورد نظرتون رو بنویسید

موفق باشید.

arsalansalar
چهارشنبه 19 دی 1386, 22:03 عصر
دوست عزیز از راهنماییت خیلی ممنون
اما یک سوال داشتم و اینکه من یک پوشه دارم و در آن 5 تا dll است اگر بخواهم کاربر با زدن یک دکمه تمامی این dll ها در system32 کپی شود از چه کدی باید استفاده کنم؟فقط محتویات پوشه کپی شود.

sinpin
چهارشنبه 19 دی 1386, 22:14 عصر
دوست عزیز از راهنماییت خیلی ممنون
اما یک سوال داشتم و اینکه من یک پوشه دارم و در آن 5 تا dll است اگر بخواهم کاربر با زدن یک دکمه تمامی این dll ها در system32 کپی شود از چه کدی باید استفاده کنم؟فقط محتویات پوشه کپی شود.

دوست عزیز با یه حلقه براحتی اینکار رو انجام بدید.
من vb ندارم رو کامپیوترم با #C مینویسم فکر نمیکنم مشکلی واسه تبدیلش داشته باشید :

foreach (string st in System.IO.Directory.GetFiles("C:\\"))
System.IO.File.Copy(st, "c:\\Windows\System32\...");

sinpin
چهارشنبه 19 دی 1386, 22:28 عصر
خب خودم تبدیلش کردم (به کمک یک سایت) :

For Each st As String In System.IO.Directory.GetFiles("C:\", "*.dll")
Dim f As New System.IO.FileInfo(st)
System.IO.File.Copy(st, "c:\Windows\System32\" + f.Name)
Next
اینم سایت خوبیه داشته باشید (واسه تبدیل #C به VB و برعکس ) :
http://labs.developerfusion.co.uk/convert/csharp-to-vb.aspx

arsalansalar
پنج شنبه 20 دی 1386, 08:36 صبح
دوست عزیز از راهنمایی شما ممنون
ولی این کد بعضی از dll ها را کپی می کند ولی با بعضی دیگر خطای ر می دهد که عکسش را در پایین گذاشتم.
یک اشکال دیگر هم دارد و اینکه در کدی که شما نوشته اید اگر اسم 2 تا dll را بیشتر بنویسم خطا میدهد.

sinpin
پنج شنبه 20 دی 1386, 12:16 عصر
دوست عزیز از راهنمایی شما ممنون
ولی این کد بعضی از dll ها را کپی می کند ولی با بعضی دیگر خطای ر می دهد که عکسش را در پایین گذاشتم.
یک اشکال دیگر هم دارد و اینکه در کدی که شما نوشته اید اگر اسم 2 تا dll را بیشتر بنویسم خطا میدهد.
دوست عزیز کدتون رو خط به خط trace کنید ببینید دقیقا کجا مشکل پیش میاد. (من اون کد رو فی البداهه نوشتم و حتی ممکنه مشکل داشته باشه)

sinpin
پنج شنبه 20 دی 1386, 12:22 عصر
دوست عزیز از راهنمایی شما ممنون
ولی این کد بعضی از dll ها را کپی می کند ولی با بعضی دیگر خطای ر می دهد که عکسش را در پایین گذاشتم.
یک اشکال دیگر هم دارد و اینکه در کدی که شما نوشته اید اگر اسم 2 تا dll را بیشتر بنویسم خطا میدهد.
دوست عزیز کدتون رو خط به خط trace کنید ببینید دقیقا کجا مشکل پیش میاد. (من اون کد رو فی البداهه نوشتم پس ممکنه باگ داشته باشه)

arsalansalar
پنج شنبه 20 دی 1386, 14:55 عصر
trace یعنی چی؟
دوست عزیز من که گفتم در این زمینه تقریبا هیچ گونه آشنایی ندارم.
لطفا بگوببد از کجا و چگونه آن را تغییر دهم.

sinpin
پنج شنبه 20 دی 1386, 21:40 عصر
trace یعنی چی؟
دوست عزیز من که گفتم در این زمینه تقریبا هیچ گونه آشنایی ندارم.
لطفا بگوببد از کجا و چگونه آن را تغییر دهم.

تو محیط VS یک منو هست به نام Debug و یک گزینه داره بنام Step Into شما از طریق این گزینه برنامه رو run کنید. Shortcut هم داره فکر کنم F11 بود جلوش نوشته. با هر بار انجام این عمل یک خط از برنامه شما اجرا میشه و با استفاده از watching میتونید مقادیر متغیرها رو در هر لحظه trace کنید.

اینجا رو ببینید :
http://www.exforsys.com/tutorials/vb.net-2005/debugging-windows-applications-in-visual-studio.net-2005.html

arsalansalar
جمعه 21 دی 1386, 11:50 صبح
:چشمک:
و خداوند search را آفرید :

System.Diagnostics.Process.Start("RegSvr32", "msdxm.ocx")

http://vbnetsample.blogspot.com/2007/08/start-and-kill-process.html (http://vbnetsample.blogspot.com/2007/08/start-and-kill-process.html)
دوست عزیز من از کد شما برای ریجستر کردن استفاده کردم و جواب هم داد ولی من یک سوال دیگر هم دارم و اینکه بعد از اینکه عمل ریجستر انجام می شود از طرف ویندوز 2 پیغام می دهد که فایل به درستی ریجستر شد.حال سوال من این است که آیا می شود این 2 پیغام را مخفی یا حذف کرد؟

sinpin
جمعه 21 دی 1386, 17:00 عصر
دوست عزیز من از کد شما برای ریجستر کردن استفاده کردم و جواب هم داد ولی من یک سوال دیگر هم دارم و اینکه بعد از اینکه عمل ریجستر انجام می شود از طرف ویندوز 2 پیغام می دهد که فایل به درستی ریجستر شد.حال سوال من این است که آیا می شود این 2 پیغام را مخفی یا حذف کرد؟
متاسفانه شما دقت نکردید چون من تو همون اولین پست این جواب رو دادم :

RegSvr32.exe has the following command-line options:

Regsvr32 [/u] [/s] [/n] [/i[:cmdline]] dllname
/s - Silent; display no message boxes
/u - Unregister server
/i - Call DllInstall passing it an optional [cmdline];
when used with /u calls dll uninstall
/n - do not call DllRegisterServer; this option must
be used with /i
آرگومان "s-" رو به دستور RegSvr32 اضافه کنید که silent بشه.

sinpin
جمعه 21 دی 1386, 17:11 عصر
پیرو تماس خصوصی :

دوست عزیز سلام
راستش من خیلی وقتم کم است و برای آموزش دیدن زمان ندارم کمتر از 24 ساعت و تا آن مدت باید پروژه را تحویل دهم.
خواهش می کنم به من سورس این کار را بدهید(register).
چون کارم خیلی گیر است.
با تشکر از لطف شما

دوست عزیز باور کنید من هم خوشحال میشم اگه بتونم کمکی به دیگران کنم. (اما متاسفانه نتونستم - وقت بزارم و - سورس کد خوبی تو اینترنت براتون پیدا کنم و خواهش میکنم خودتون هم یه مقدار همکاری کنید. ممکنه خیلی ها تحت فشار باشند)
در حاشیه : من خودم باید پس فردا یه برنامه رو تحویل بدم و باور نمیکنید که چقدر تحت فشار و استرس هستم (چون - بخاطر یک اشتباه کوچیک - تخمین بسیار بدی واسه تاریخ اتمام برنامه زدم، اما این فقط یک تجربه سخت شد و با خودم عهد کردم که از این به بعد اگه کارفرما به نوعی با من راه نیاد و یا کار بی کیفیت و عجله ای بخواد ... تحت هیچ شرایطی قرارداد نبندم چون گاهی یک برنامه به ظاهر ساده ممکنه توی بازه ای از زمان تمام زندگی شما رو تحت تاثیر خودش قرار بده)

arsalansalar
جمعه 21 دی 1386, 19:36 عصر
دوست عزیز من مشکلم حل شد.
از اینکه وقت شما را گرفتم معذرت می خواهم.
من و شما تقریبا هم مشکل بودیم ومن هم با یک تخمین اشتباه دچار مشکل شدم.
باز هم از شما ممنون هستم چون کمک بزرگی به من کردید.

arsalansalar
جمعه 21 دی 1386, 19:43 عصر
اینم کدی که مشکل من را حل کرد.میگذارم شاید به درد کسی بخورد.


My.Computer.FileSystem.CopyFile(Application.Startu pPath & "\ \msvcr71.dll", "c:\Windows\System32\msvcr71.dll", True)

sinpin
جمعه 21 دی 1386, 20:43 عصر
...من برای اینکه silent کنم از کد زیر به این صورت استفاده کردم ولی مرتب خطا می گیرد .میدانم که اشتباه می نویسم لطفا یک نمونه صحیح به من بدهید.


System.Diagnostics.Process.Start("RegSvr32 /s", "WMonitorX.dll")


من الان دسترسی به محیط دات نت ندارم ولی فکر میکنم اینجوری بنویسید مشکلتون حل بشه :


System.Diagnostics.Process.Start("RegSvr32", "-s WMonitorX.dll")

اولین پارامتر متود Start فقط باید حاوی نام فایل باشه، آرگومانها رو در پارامتر دوم ارسال کنید.

arsalansalar
شنبه 29 دی 1386, 19:28 عصر
آقا این کارهای که ما درباره register انجام دادیم کاملا درست کار می کرد و در کامپیوتر خودم نیز کامل کامل بود.
اما من این را در یک کامپیوتر دیگر تست کردم و البته در 3 تا کامپیوتر دیگر نیز همین طور ولی همه یک پیغام مشترک میدهد و آن پیغام این است:
access is denied
البته من در تمامی کامپیوتر ها administrator بودم.
به نظر شما اشکال از کجاست؟

arsalansalar
شنبه 29 دی 1386, 20:39 عصر
اینم عکس خطای که می دهد.

sinpin
یک شنبه 30 دی 1386, 00:20 صبح
آقا این کارهای که ما درباره register انجام دادیم کاملا درست کار می کرد و در کامپیوتر خودم نیز کامل کامل بود.
اما من این را در یک کامپیوتر دیگر تست کردم و البته در 3 تا کامپیوتر دیگر نیز همین طور ولی همه یک پیغام مشترک میدهد و آن پیغام این است:
access is denied
البته من در تمامی کامپیوتر ها administrator بودم.
به نظر شما اشکال از کجاست؟
ظاهرا شما موقع کپی msvcr71.dll به این مشکل برمیخورید.
و پیغام خطا میگه که یک پروسه ای در حال حاضر داره با اون dll کار میکنه. پس بهتره این عمل رو در یک try و Catch انجام بدید. و یا اینکه تست کنید اگه سیستمی این dll رو داره اصلا از کپی کردن اون دست بردارید.
هیچ الزامی هم نیست که شما dll رو حتما در system32 کپی کنید (معمولا dllهایی که توسط سایر برنامه ها امکان استفاده دارند اینجا کپی میشند) و میتونید اون رو در همون جایی که برنامه شما نصب میشه (Program Files\...) کپی و بعد رجیستر کنید.

arsalansalar
یک شنبه 30 دی 1386, 07:35 صبح
دوست عزیز اگر من در پوشه (program files.../)کپی کنم آن وقت برای ریجستر کردن dll هایی که در program file است از چه دستوری باید استفاده کنم؟

sinpin
یک شنبه 30 دی 1386, 07:52 صبح
دوست عزیز اگر من در پوشه (program files.../)کپی کنم آن وقت برای ریجستر کردن dll هایی که در program file است از چه دستوری باید استفاده کنم؟
همون دستور قبلی !
منتها به جای نام فایل باید نام و آدرس کامل اون رو بنویسید.

arsalansalar
یک شنبه 30 دی 1386, 10:22 صبح
دوست عزیز من از دستور زیر استفاده کردم ولی خطا داد.


System.Diagnostics.Process.Start("RegSvr32", "-s C:\Program Files\novin\WMonitorX.dll")

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

sinpin
یک شنبه 30 دی 1386, 10:41 صبح
مشکلی که من دارم این است که فایلهای dll من حتما حتما باید در system32 کپی شود.
به نظر شما راه حل دیگری وجود دارد؟
مشکل شما همونطور که قبلا هم گفتم با یه try catch حل میشه. یا اینکه تست کنید اگه اون dll وجود داره دیگه کپی نکنید.

arsalansalar
یک شنبه 30 دی 1386, 12:00 عصر
مشکل شما همونطور که قبلا هم گفتم با یه try catch حل میشه. یا اینکه تست کنید اگه اون dll وجود داره دیگه کپی نکنید.
من از یک جهت مطمئن هستم که dll وجود ندارد ولی یک سوال و اینکه چگونه می توان فهمید که این dll وجود دارد یا نه؟

sinpin
یک شنبه 30 دی 1386, 12:05 عصر
من از یک جهت مطمئن هستم که dll وجود ندارد ولی یک سوال و اینکه چگونه می توان فهمید که این dll وجود دارد یا نه؟

if (Directory.Exists("c:\windows\system32\msvcr71.dll"))

arsalansalar
یک شنبه 30 دی 1386, 13:39 عصر
if (Directory.Exists("c:\windows\system32\msvcr71.dll"))
دوست عزیز این دستور شرط وجود یا عدم وجود را بررسی می کند.دستور کپی نکردن در صورت وجود این dll چیست؟

sinpin
یک شنبه 30 دی 1386, 13:55 عصر
دوست عزیز این دستور شرط وجود یا عدم وجود را بررسی می کند.دستور کپی نکردن در صورت وجود این dll چیست؟
دستور کپی نکردن ؟ :اشتباه: !!!

arsalansalar
یک شنبه 30 دی 1386, 14:16 عصر
خوب بعد از شرط و جلوی then باید یک عملی انجام شود.
خوب آن عمل چیست؟