PDA

View Full Version : مخفی کردن dll



hossein-khoshseyar
شنبه 27 شهریور 1389, 14:29 عصر
دوستان من تو یه پروژه تو خیلی از قسمت های برنامم از کنترل هایی که خودم ساختم استفاده کردم
منظورم اینه که یک سری چیزهایی که تو برنامم خیلی کاربرد داشت رو به شکل کنترل ساختم و به dll تبدیلش کردم . بعد تو برنامم ازش استفاده کردم
الان مشکلی که هست اینه که من اگه پروژه نهایی خودم رو به شکل ست آپ در بیارم و به کسی بدم
بعد نصب برنامه خیلی راحت می تونه از توی پوشه برنامم dll ها رو برداره و ازش استفاده کنه

برای حل این مشکل چیکار کنم ؟

امکانش هست که dll ها رو یه جایی بشه مخفی کرد . یا کد کرد که جز همون برنامم کسی نتونه ازش استفاده کنه
پیشاپیش از راهنماییتون ممنون

VisualBasic-NET
شنبه 27 شهریور 1389, 14:57 عصر
سلام دوست عزیز
یک راه حل: شما می تونید فایل های dll را داخل پوشه system32 انتقال بدید. با این شرایط احتمال پیدا کردن فایهای dll کمتر میشه.

و یک کاری که به نظر من بهتر چندتا فایل dll و ... با اسمهای جالب پیدا کن (مثلاً از شاخه ویندوز) و کنار برنامه نصب کن تا از لو رفتن فایلات جلوگیری کن

hossein-khoshseyar
شنبه 27 شهریور 1389, 15:03 عصر
ممنون از راه حلت
راه حل اولت به نظر خوبه . ولی خوب بازهم به یک سری برنامه ها میشه فهمید که موقع نصب برنامه داره چه فایل هایی رو کجا کپی می کنه
یه راه بهتر می خوام
باید یه راه حلی داشته باشه

VisualBasic-NET
شنبه 27 شهریور 1389, 15:08 عصر
من راه حل بهتری نمی شناسم.
ولی اگه قرار باشه کسی ببین که فایلهای شما چطور نصب می شه بازم نرم افزاری هست که حتی فایلهای داخل exe را هم بیرون می کشه. حتی سورس کدهای شما، پسوردهای داخل سورس کد و...........

ولی بعید میدونم که کسی حال این کارا داشته باشه.
به هرحال اگه راهی پیدا کردی به ما هم خبر بده.

hossein-khoshseyar
شنبه 27 شهریور 1389, 15:11 عصر
امیدارم که دوستان اگه کسی راه حل بهتری داره همین جا قرار بده
چو ن من خیلی فرصت ندارم و چند روز دیگه باید نرم افزار رو تحویل بدم
ممنون می شم اگه کمکم کنید

hossein-khoshseyar
شنبه 27 شهریور 1389, 15:16 عصر
راستی یه سئوال
من ست آپ رو با خود ویژوال استودیو درست میکنم
اگه تو درست کردن ست آپ بخوام بقیه dll ها رو به پوشه system32 منتقل کنم و توی پوشه اصلی برنامم فقط فایل exe بمونه
مشکلی پیش نمیاد.
فایل exe کار می کنه؟

VisualBasic-NET
شنبه 27 شهریور 1389, 15:29 عصر
من قبلاً این کارا انجام دادم شده

hero4000
شنبه 27 شهریور 1389, 15:36 عصر
دوست عزيز برنامه هايي هستند مثلNet Reactor. که اين قابليت رو هم دارند که فايل دي ال ال رو به فايل اجرائي برنامه وصل کنند

ميتوني از اونا استفاده کني

محسن شامحمدی
شنبه 27 شهریور 1389, 15:49 عصر
یک سری چیزهایی که تو برنامم خیلی کاربرد داشت رو به شکل کنترل ساختم و به dll تبدیلش کردم . بعد تو برنامم ازش استفاده کردم
خب می تونی به جای این کار کنترل هایی که ساختی رو در خود پروژه اصلی اضافه کنی یعنی اینکه وقتی پروژه رو کامپایل می کنی فقط یک فایل exe ساخته می شه و کنترل هاتون در همون فایل قرار می گیره.
روش کار هم سادست.
به حای اضافه کردن یک پروژه جدید به solution می شه یک کنترل جدید به project اضافه کرد.:لبخندساده:

hossein-khoshseyar
شنبه 27 شهریور 1389, 16:05 عصر
من قبلاً این کارا انجام دادم شده


اما من الان این رو تست کردم نشد
یعنی اگه همه فایلا رو توی سیستم گپی کنم و فایل اجرایی تنها باشه. کار نمی کنه
--------------------

دوست عزيز برنامه هايي هستند مثلNet Reactor. که اين قابليت رو هم دارند که فايل دي ال ال رو به فايل اجرائي برنامه وصل کنند

ميتوني از اونا استفاده کني


میشه یه مثالی بزاری یا توضیحی بدی
ممنون میشم از کمکت
--------------------

خب می تونی به جای این کار کنترل هایی که ساختی رو در خود پروژه اصلی اضافه کنی یعنی اینکه وقتی پروژه رو کامپایل می کنی فقط یک فایل exe ساخته می شه و کنترل هاتون در همون فایل قرار می گیره.
روش کار هم سادست.
به حای اضافه کردن یک پروژه جدید به solution می شه یک کنترل جدید به project اضافه کرد.:لبخندساده:


روشت که به نظر خیلی خوب میاد
متوجه منظورت شدم که تهش نتیجه چی میشه اما نفهمیدم چطوری باید این کار رو بکنم
من الان dll هایی که ساختم رو تو toolbax اضافه می کنم و ازشون استفاده می کنم
حالا شما می گی که .....
اگه میشه یه کم بیشتر توضیح بدین ممنون

محسن شامحمدی
شنبه 27 شهریور 1389, 16:37 عصر
اگه میشه یه کم بیشتر توضیح بدین

در واقع مثل اضافه کردن یک فرم جدید هستش فقط به جای فرم می زنیم user control .
http://barnamenevis.org/forum/attachment.php?attachmentid=56624&stc=1&d=1284813352
درست شد؟
---------------------
لابد شما می گی که من اینارو ساختم و نمی خوام تازه شروع به ساختن کنم خب جوابتون سادست کافیه به جای گزینه user control گزینه existing item رو بزنید و user control ای که قبلا ساخته شده بود رو انتخاب کنید.
اینطوری اون user control به داخل پروژه کشیده می شه.

hossein-khoshseyar
شنبه 27 شهریور 1389, 16:42 عصر
ممنون
با اینکه این کار باعث شلوغ شدن سلوشن میشه ( البته من تو پروژم کلی فرم و کلی کنترل دارم و اگه همه کنترل هام رو بخوام به این شکل اضافه کنم او.....سلوشنم وحشتناک میشه )
اما حداقل تو این عجله ای که دارم بهترین راه حل
ممنون از راهنماییت

محسن شامحمدی
شنبه 27 شهریور 1389, 16:45 عصر
این کار باعث شلوغ شدن سلوشن میشه

http://barnamenevis.org/forum/attachment.php?attachmentid=56624&stc=1&d=1284813352
دوست عزیز به این عکس توجه کنید می بینید که ویژوال استودیو به شما امکان ساختن new Folder رو می ده.
یک new folder ایجاد کنید و کنترل هاتون رو توش بریزید.

hossein-khoshseyar
شنبه 27 شهریور 1389, 16:46 عصر
راستی تو این پروژه مشکم با راه حلی که دوستمون گفت حل شد

اما اگه توی یه پروژه ای ما از dll هایی استفاده کنیم که خودمون نساختیم
اما نمی خوایم بعد از ساخت برنامه کارفرما بتونه ببینه ما از چه dll هایی استفاده کردیم و امکان استفاده از اون رو نداشته باشه
برا حل این مشکل باید چیکار کرد؟

mahdi1373
شنبه 27 شهریور 1389, 22:00 عصر
به نظر من راه حل بهتری برای مشکل اولت هست. می تونی روی هر کدون از توابع ات یک ورودی برای پسورد اضافه کنی، یا اینکه یه تابع داشته باشی، به نام Load وقتی کاربر وارد برنامه میشه باید اونو اجرا کنی اگه نه از برنامه بیرون بیاد یا امثال این روش های ابتکاری.
کپی کردن DLL ها توی System32 باید جواب بده. اگه نه شاید مشکل از register کردن اونا باشه. یعنی شاید باید علاوه بر کپی کردن DLL ها توی Sytem32، اونارو رجیستر هم بکنی.


اما اگه توی یه پروژه ای ما از dll هایی استفاده کنیم که خودمون نساختیم
اما نمی خوایم بعد از ساخت برنامه کارفرما بتونه ببینه ما از چه dll هایی استفاده کردیم و امکان استفاده از اون رو نداشته باشه
برا حل این مشکل باید چیکار کرد؟ خوب اگه این هارو تو System32 کپی کنی دیگه کسی نمی فهمه.

hossein-khoshseyar
یک شنبه 28 شهریور 1389, 07:31 صبح
در واقع مثل اضافه کردن یک فرم جدید هستش فقط به جای فرم می زنیم user control .
http://barnamenevis.org/forum/attachment.php?attachmentid=56624&stc=1&d=1284813352
درست شد؟
---------------------
لابد شما می گی که من اینارو ساختم و نمی خوام تازه شروع به ساختن کنم خب جوابتون سادست کافیه به جای گزینه user control گزینه existing item رو بزنید و user control ای که قبلا ساخته شده بود رو انتخاب کنید.
اینطوری اون user control به داخل پروژه کشیده می شه.

دوست عزیز یه مشکلی هست
با این وش که کنترل ها رو میاریم تو پروژه دیکه نمیتونیم اون رو به شکل یک کنترل به تولباکس اضافه کنیم و بیاریم توی فرم؟
فقط می تونیم با نوشتن کد توی فرم دیزاینر کنترل رو به فرم اضافه کنیم
درست میگم یا نه؟
اگه نه لطفا توضیح دهید
--------------------


کپی کردن DLL ها توی System32 باید جواب بده. اگه نه شاید مشکل از register کردن اونا باشه. یعنی شاید باید علاوه بر کپی کردن DLL ها توی Sytem32، اونارو رجیستر هم بکنی.
.

خوب من که دستی این کار رو نمی کنم پکیج ست آپ اونا رو توی system32 کپی میکنه
فکر هم میکنم موقع کپی کردن خودش اونا رو رجیستر میکنه

محسن شامحمدی
چهارشنبه 31 شهریور 1389, 20:58 عصر
دوست عزیز یه مشکلی هست
با این وش که کنترل ها رو میاریم تو پروژه دیکه نمیتونیم اون رو به شکل یک کنترل به تولباکس اضافه کنیم و بیاریم توی فرم؟
فقط می تونیم با نوشتن کد توی فرم دیزاینر کنترل رو به فرم اضافه کنیم
درست میگم یا نه؟
اگه نه لطفا توضیح دهید
نه
اصلا اینطوری نیست
فقط کافیه کنترل رو که ساختید یک بار کل Solution رو Build کنید.
خواهید دید که خودش میاد تو ToolBox
به این مثال دقت کنید.

اول یوزر کنترل رو اضافه می کنیم
http://barnamenevis.org/forum/attachment.php?attachmentid=56624&stc=1&d=1284813352

همینطور که در تصویر می بینید هنوز یوزرکنترل به لیست اضافه نشده
http://www.barnamenevis.org/forum/attachment.php?attachmentid=56915&stc=1&d=1285178276

حالا بیاید تو منوی build و گزینه build solution رو بزنید
http://www.barnamenevis.org/forum/attachment.php?attachmentid=56916&stc=1&d=1285178276
حالا به toolbox نگاه کنید

http://www.barnamenevis.org/forum/attachment.php?attachmentid=56914&stc=1&d=1285178276
البته ویژوال استودیوی من 2008 هستش شاید تو ورژن های قبل اینطوری نبوده.!!!!!

hossein-khoshseyar
چهارشنبه 31 شهریور 1389, 21:35 عصر
ممنون از توجه همتون



خوب من که دستی این کار رو نمی کنم پکیج ست آپ اونا رو توی system32 کپی میکنه
فکر هم میکنم موقع کپی کردن خودش اونا رو رجیستر میکنه

درست گفتم یا نه ؟

محسن شامحمدی
پنج شنبه 01 مهر 1389, 09:24 صبح
فکر هم میکنم موقع کپی کردن خودش اونا رو رجیستر میکنه
بستگی به نوع dll ها داره.
dll های دات نت نیازی به رجیستر شدن ندارند و اگر کنار برنامه یا در پوشه Gac باشند برنامه به راحتی اجرا می شود.به همین دلیل مایکروسافت خیلی رو این قضیه تبلیغات می کنه.

hossein-khoshseyar
پنج شنبه 01 مهر 1389, 09:40 صبح
بستگی به نوع dll ها داره.
dll های دات نت نیازی به رجیستر شدن ندارند و اگر کنار برنامه یا در پوشه Gac باشند برنامه به راحتی اجرا می شود.به همین دلیل مایکروسافت خیلی رو این قضیه تبلیغات می کنه.

یعنی حتما باید توی پوشه gac باشه
اگه مستقیم کنار فایل اجرایی باشه کار نمی کنه؟
یا اگه توی سیستم 32 کپی کنیم کار نمی کنه؟

من هنوز با این قضیه مشکل دارم و نتونستم که dll ها روی توی سیستم 32 کپی کنم و برنامم کار کنه
وقتی اینکار رو می کنم برنامم خظا می ده و اجرا نمی شه

vrbahrami
پنج شنبه 01 مهر 1389, 10:33 صبح
دوستان همه به فولدر System 32 اشاره کردن در صورتی که برای اینکه یه اسمبلی Share بشه و برنامه بتونه ازش استفاده بکنه باید داخل فولدر Assembly نصب بشه نه توی System 32, برای نصب Assembly سه راه داری یکی از طریق Command خود Visual Studio دومی از طریق فایل Setup که خودت درست کردی سومی از طریق Drag کردن داخل فولدر Assembly
در ضمن برای اینکه بتونی یه اسمبلی (DLL) نصب بکنی دو چیز هست که حتما باید داشته باشه یکی ورژن اسمبلی هست دومی کلید منحصر بفردی هست که باید براش تولید بکنی.
یا حق

hossein-khoshseyar
پنج شنبه 01 مهر 1389, 13:13 عصر
دوستان همه به فولدر System 32 اشاره کردن در صورتی که برای اینکه یه اسمبلی Share بشه و برنامه بتونه ازش استفاده بکنه باید داخل فولدر Assembly نصب بشه نه توی System 32, برای نصب Assembly سه راه داری یکی از طریق Command خود Visual Studio دومی از طریق فایل Setup که خودت درست کردی سومی از طریق Drag کردن داخل فولدر Assembly
در ضمن برای اینکه بتونی یه اسمبلی (DLL) نصب بکنی دو چیز هست که حتما باید داشته باشه یکی ورژن اسمبلی هست دومی کلید منحصر بفردی هست که باید براش تولید بکنی.
یا حق

دوست عزیز اگه ممکنه یه کم بیشتر راجع به نصب dll توضیح بدی
ممنون میشم

محسن شامحمدی
پنج شنبه 01 مهر 1389, 14:30 عصر
خلاصه فرمایشات دوستمون می شه :
یا dll هاتون رو کنار برنامه بذارید
یا dll هاتون رو در پوشه c:\windows\assembly بریزید
یا dll هاتون رو تو هر جایی که می ذارید (مسیرش مهم نیست) بگیرید با gacutil رجیسترش کنید (http://msdn.microsoft.com/en-us/library/ex0ss12c%28VS.80%29.aspx)

hossein-khoshseyar
پنج شنبه 01 مهر 1389, 21:01 عصر
یا dll هاتون رو در پوشه c:\windows\assembly بریزید

توی این پوشه رو که نگاه می کنم حتی یک dll هم وجود نداره

محسن شامحمدی
پنج شنبه 01 مهر 1389, 21:09 عصر
مال منو ببینید توش پر از dll دات نتیه.
http://barnamenevis.org/forum/attachment.php?attachmentid=56976&stc=1&d=1285265265
وقتی که برنامه دات نت فریمورک نصب می شه این پوشه هم ساخته می شه و توش پر می شه از dll های دات نتی.
اگر dll ای در این پوشه باشد هر برنامه دات نتی می تواند از آن استفاده کند.

hossein-khoshseyar
پنج شنبه 01 مهر 1389, 21:25 عصر
مال منو ببینید توش پر از dll دات نتیه.
http://barnamenevis.org/forum/attachment.php?attachmentid=56976&stc=1&d=1285265265
وقتی که برنامه دات نت فریمورک نصب می شه این پوشه هم ساخته می شه و توش پر می شه از dll های دات نتی.
اگر dll ای در این پوشه باشد هر برنامه دات نتی می تواند از آن استفاده کند.
پس اگه dll مال دات نت نباشه گذاشتن توی این پوشه فاید ه ای نداره ؟

حالا 3 تا سو.ال
با توجه یه چیزایی که توی این تاپیک گفتید
1) ظاهرا dll یا ocx تو کامپیوتر مقصد هر جا گه باشه اگه رجیستر بشه مشکلی وچود نداره و برنامه ران میشه
حالا مشکل من اینه که با اینکه dll ها رو توی system32 کپی میکنم بازم برنامم کار نمیکنه

2) با رجیستر کردن دستی توی ویندوز 7 مشکل دارم و خطا میده

3) چطور میتونم بفهمم یه dll مال دات نت هست یا نه

محسن شامحمدی
پنج شنبه 01 مهر 1389, 21:55 عصر
پس اگه dll مال دات نت نباشه گذاشتن توی این پوشه فاید ه ای نداره ؟
منظور من dll های دات نتی تون بود.

--------------------
پاسخ به سوالات

ظاهرا dll یا ocx تو کامپیوتر مقصد هر جا گه باشه اگه رجیستر بشه مشکلی وچود نداره و برنامه ران میشه؟
dll های دات نتی باید با gacutil رجیستر بشن و dll های غیر دات نتی با regsvr32
-------------

حالا مشکل من اینه که با اینکه dll ها رو توی system32 کپی میکنم بازم برنامم کار نمیکنه؟
من که گفتم هر جا دوست دارین بریزین ولی فقط رجیستر هم کنید لطفا!
----------------

با رجیستر کردن دستی توی ویندوز 7 مشکل دارم و خطا میده؟
همینطوره متاسفانه برای رفع این مشکل باید از برنامه هایی که این کارو می کنن مثل setup factory استفاده کنید. خودم تستش کردم و تو seven هم به راحتی رجیستر میکنه.
-----------------

چطور میتونم بفهمم یه dll مال دات نت هست یا نه
با برنامه exe info pe ------- setup factory --------- visual studio

vrbahrami
یک شنبه 11 مهر 1389, 08:31 صبح
توی این پوشه رو که نگاه می کنم حتی یک dll هم وجود نداره
فایل dll رو داخل روت اصلی درایو قرار بدید (هر درایوی فقط داخل روت) مثل G:\ بعد داخل Start - ویژوال استدیو 2008 - ویژوال استدیو تولز - ویژوال استدیو کامند پرامپت
Start - Visual Studio 2008 - Visual Studio Tools - Visual Studio Command Prompt مثال برای نصب x.dll اول داخل روت درایو E یا هر درایوی بعد داخل کامند پرامپت این کد رو مینویسی. Gacutil /i e:\x.dll برای پاک کردنش هم Gacutil /u x.dll https://www.mcpvirtualbusinesscard.com/VBCServer/e74658d5-ad97-4b37-bb9c-242f9aaf37aa/profile