PDA

View Full Version : سوال: نحوه رچیستر کردن Dll با regasm



sinaone1
دوشنبه 24 بهمن 1390, 23:03 عصر
سلام به همه دوستان
من پروژه زیر رو ایجاد کردم و هنگامی که اونو run می کنم فایل رجیستر میشه ولی من نمی دونم چطور می تونم اونو در ویندوز های دیگه رجیستر کنم
البته یه چیزایی در مورد regAsm و gacutil /i خوندم ولی هر کاری کردم نتونستم با اون dll ام رو رجیستر کنم
اگه ممکنه کمکم کنید
ممنون

Esmail Solhkhah
سه شنبه 25 بهمن 1390, 00:15 صبح
موقع نصب رو سیستم مشتری

Gacutil -i DllName.dll

اینجا DllName.dll نام dll شماست

فایل Gacutil.exe معمولا تو مسیر زیر هست

C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin

البته این مسیر بستگی به SDK نصب شده داره

اگه از برنامه های ستاپ بیلدر استفاده میکنید خودشون قابلیت نصب اسمبلی های رو معمولا دارن

موفق باشید.

amir4015
سه شنبه 25 بهمن 1390, 00:24 صبح
با دستور زير مي توني فايلاتو همراه نرم افزار كني
string masir=application.executabcepath;
int arghanm=masir.leughth;
string masirasli=masir.substring(0,argham-تعداد كاركتر هاي اسم برنامه با پسوند);

Esmail Solhkhah
سه شنبه 25 بهمن 1390, 00:29 صبح
با دستور زير مي توني فايلاتو همراه نرم افزار كني
string masir=application.executabcepath;
int arghanm=masir.leughth;
string masirasli=masir.substring(0,argham-تعداد كاركتر هاي اسم برنامه با پسوند);

نصب اسمبلی تو گلوبال اسمبلی کش و این کد شما ؟

میشه ارتباطشو بگید ؟

amir4015
سه شنبه 25 بهمن 1390, 00:32 صبح
كلا گفتم
مي شه با اين دستور مسيري كه فايل قرار داره رو پيدا كرد
(مسيري كه روي هر كامپيور فايل اصلي قرار داره)

Esmail Solhkhah
سه شنبه 25 بهمن 1390, 00:34 صبح
كلا گفتم
مي شه با اين دستور مسيري كه فايل قرار داره رو پيدا كرد
(مسيري كه روي هر كامپيور فايل اصلي قرار داره)



سوال چیزه دیگه ای هست


من نمی دونم چطور می تونم اونو در ویندوز های دیگه رجیستر کنم
در هر صورت ممنون که وقت میذارید

موفق باشید.

amir4015
سه شنبه 25 بهمن 1390, 00:40 صبح
بله من سوال اشتبا متوجه شدم

sinaone1
سه شنبه 25 بهمن 1390, 07:31 صبح
آقا دیدم کمه تشکر اونطوری این پست هم زدم من دیروز در حدود 90 بار کامپیوترم رو restart یا restore کردم ولی به نتیجه نرسیدم ، یه دنیا ممنون

b.saminjad
سه شنبه 25 بهمن 1390, 08:23 صبح
سلام

میتونی دستوراتی که مهندس Esmail Solhkhah (http://barnamenevis.org/member.php?27551-Esmail-Solhkhah) گفتن رو به صورت یک فایل bat بنویسی و اجرا کنی

البته اقا اسماعیل استادن برای تکمیل فرمایشات ایشون باید بگم که اسمبلی اضافه شونده بهgac باید قوی نام باشه

sinaone1
سه شنبه 25 بهمن 1390, 09:34 صبح
آقا من اینو پیدا کردم که گفتم بد نیست بزارم البته مربوط به RegAsm هست و فکر میکنم دستوری هم برای Gas به این صورت وجود داشته باشه
Dim asm As Assembly = Assembly.LoadFile("E:\a.dll")
Dim regAsm As New RegistrationServices()
Dim bResult As Boolean = regAsm.RegisterAssembly(asm, AssemblyRegistrationFlags.SetCodeBase)

Esmail Solhkhah
سه شنبه 25 بهمن 1390, 12:04 عصر
فکر میکنم دستوری هم برای Gas به این صورت وجود داشته باشهاز متد GacInstall کلاس Publish بصورت زیر استفاده کنید

دقت کنید این کلاس تو فضای نام System.EnterpriseServices.Internal تعریف شده پس قبلش باید System.EnterpriseServices.dll رو به رفرنسهاتون اضافه کنید.


new Publish().GacInstall(Path.GetDirectoryName(Applica tion.ExecutablePath) + @"\" + "Test.dll");

دقت کنید مطابق فرمایش دوست عزیزمون جناب b.saminjad (http://barnamenevis.org/member.php?238412-b.saminjad)

اسمبلی شما باید قبلا Strong Named (http://msdn.microsoft.com/en-us/library/wd40t7ad.aspx) شده باشه

اینجا معمولا موردی که پیش میاد اینه که شما اسمبلی رو نصب کردید و حالا میخاید اونو تو VS استفاده کنید و Add Reference میکنید و اسمبلی مورد نظر تو لیست دیده نمیشه

فقط نصب اسملبی تو GAC کافی نیست تا شما بتونید تو VS ازش استفاده کنید برای اینکه VS بتونه اسمبلی رو براتون نشون بده باید تو ریجستری یه کلید ایجاد کنید تو این مسیر

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramewor k\AssemblyFolders

مثلا نام کلید رو بذارید
My Assembly

مقدار دیفالت این کلید رو بذارید مثلا
E:\My Framework

بعدش یا قبلش شما باید اسمبلی مورد نظرتون رو تو این مسیر کپی کنید تا VS بتونه تو لیست اسمبلی های دات نت براتون نشون بده

ولی اگه قصدتون فقط ارائه نسخه به مشتری هست که نیازی به پروگرمینگ نداره فقط نصب تو GAC کافیه

موفق باشید.

sinaone1
سه شنبه 25 بهمن 1390, 21:32 عصر
سلام دوباره
عزیز این Strong name چیه و چطور میشه اونو ساخت آخه اگه پروژه منو نگاه کنید دو تا dll هست که یکیش با GAC اسمبل میشه ولی اون یکی رو ارور میده و نمیذاره اسمبل کنم

راستی یه مشکل جدید : من چند بار کامپیوتر رو Restore کردم و دیدم به راحتی dll ها نصب شده و کار میکنند ولی حالا بردم روی یه کامپیوتر دیگه و همون کارا رو کردم ولی این بار جواب نداد میشه بگید مشکل من چیه ؟
این کدهای رجیستریه که من استفاده کردم :

Gacutil -i E:\Debug\Edanmo.ShellExtensions.dll
Regasm.exe E:\Debug\HPTExtShellThumbnail.dll /codebase /tlb:E:\Debug\HPTExtShellThumbnail.tlb
آیا کدهای من اشکال داره آخه چون دومی رو نمیذاشت با GAC برم منم با RegAsm میرفتم که خوب روی کامپیوتر خودم راحت اینستال میکنه ولی بقیه نه
ممنون

Esmail Solhkhah
سه شنبه 25 بهمن 1390, 22:56 عصر
عزیز این Strong name چیه و چطور میشه

پراپرتی پروژه رو باز کنید و از قسمت Signing چک باکس Sign the assembly رو فعال کنید از کامبو باکس پایینی دو انتخاب دارید

1: New
2:Browse

اگه اولی رو انتخاب کردید یه نام فایل میخاد که این نام فایل Key شما میشه و اگه خاستید میتونید جهت امنیت بیشتر رمز هم به این فایل بدید

اگه دومی رو انتخاب کردید باید قبلا فایل Key رو ایجاد کرده باشید و اینجا انتخابش کنید

برای ایجاد فایل Key

Sn -k YourkeyFileName.Snk

اینجا YourkeyFileName.Snk نام فایل Key شماست

مثلا

Sn.exe -k d:\mykey.snk

فایل Sn.exe تو مسیر SDK هست میتونید با استفاده از Visual Studio Tools\Visual Studio Command Prompt فایل Sn.exe رو بدون اینکه بدونید کجاس استفاده کنید(چون قبلا برا سیستم تعریف شده)

چرا از RegAsm استفاده میکنید ، میخیاد اسمبلی بصورت COM هم قابل استفاده باشه ؟

sinaone1
سه شنبه 25 بهمن 1390, 23:07 عصر
نه عزیز اگه تستی که گذاشتم رو دانلود کرده باشید اولی رو با GAS میکنه و successful میده ولی dll که من ساختم رو اجازه نمیده و این خطا رو میده :


Failure adding assembly to the cache: Attempt to install an assembly without a s
trong name

Esmail Solhkhah
سه شنبه 25 بهمن 1390, 23:10 عصر
نه عزیز اگه تستی که گذاشتم رو دانلود کرده باشید اولی رو با GAS میکنه و successful میده ولی dll که من ساختم رو اجازه نمیده و این خطا رو میده

خب دیگه از خطا معلومه dll ای که شما ساختید ساینش نکردید

همون پست بالا که توضیح دادم شما اول این dll تون رو براش Key ست کنید بعد که بیلد کردید دیگه این خطا رو نمیده

موفق باشید.

sinaone1
سه شنبه 25 بهمن 1390, 23:58 عصر
عزیز یه دنیا ممنونم اگه شما نبودید ممکن بود هیچ وقت به جواب نرسم حیف که نمیشه بیش از یه بار تشکر کرد تمام مشکلات من سر دوتا چیز بود
1 : تیک Com رو زده بودم
2 : Strong key رو نساخته بودم
ولی با راهنمایی های شما درست شد
بازم ممنون

Esmail Solhkhah
چهارشنبه 26 بهمن 1390, 00:02 صبح
عزیز یه دنیا ممنونم اگه شما نبودید ممکن بود هیچ وقت به جواب نرسم حیف که نمیشه بیش از یه بار تشکر کرد

شما لطف دارید

برای اطلاعات بیشتر در این زمینه کتاب CLR via c# رو هم یه نگاهی بندازید

http://barnamenevis.org/showthread.php?313713-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%DA%A9%D9%86%DB%8C%D8%AF-%D8%AA%D8%B1%D8%AC%D9%85%D9%87-%DA%A9%D8%AA%D8%A7%D8%A8-CLR-via-C-%E2%80%8E-3rd-Ed-%D9%86%D9%88%D8%B4%D8%AA%D9%87-%D8%AC%D9%81%D8%B1%DB%8C-%D8%B1%DB%8C%DA%86%D8%B1

موفق باشید.