PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : روشهاي نو و جالب در ساخت فايلهاي نصبي و پرتابل، بصورت ترکيبي [eDvArDo]



eDvArDo
02-21-2015, 05:48 PM
سلام

همونطور که شما دوستان ميدونيد برنامه‌هاي پرتابل يا قابل حمل مزيتهاي بسياري دارند. اگه شما گاهي و بسته به مورد احتياج به نرم‌افزاري داريد بهتر است که بصورت پرتابل داشته باشيد.

روشهاي زيادي براي پرتابل سازي نرم افزارها وجود دارد:
1- پرتابل سازي با نرم افزارهاي ويژه مانند VMware ThinApp و Spoon Studio
2- پرتابل سازي دستي به کمک کد نويسي و استفاده از برنامه‌هايي مانند AutoIT و NSIS و حتي WinRAR

اما هميشه کساني هستند که ابتکارات جالب بخرج ميدهند و به دليل تسلط کامل به برنامه‌نويسي و اصطلاحاً کد نويسي، روشهاي جديدي و خاصي براي توليد برنامه‌هاي پرتابل بوجود مياورند!

تقريباً ماه پيش برنامه‌اي دانلود کردم که ويژگي خاصي داشت. يک فايل نصبي بهمراه دو فايل بچ (با فرمت cmd) که با استفاده از فايلها، فايل نصبي به دو روش 1- نصب سايلنت و اکتيو 2- نصب بصورت پرتابل خروجي ميداد. فايل نصبي مشترک و کم حجم بود!
اون برنامه‌رو طي تاپيکي معرفي کردم و از جناب مهندس شيرين‌زبان، استاد خودم خواستم بررسي و روش ساخت چنين فايلهايي مشخص کنند.

http://ariadl.ir/thread170360.html

استاد عزيزم با مشغله فراوان و کسالتهايي که داشتند، فراموش نکردند و با بررسي هاي مختلف و روشهاي متعدد آزمايشي راز و رمزهايي از آن درآوردند و اگر خدا بخواهد و استاد فرصت و توانايي جسمي لازم را داشته باشند، در ادامه همين تاپيک ساخت چنين فايلهايي را آموزش خواهند داد.

استاد، سپاس

Magsoud
02-21-2015, 06:40 PM
حدود یک ماه پیش دوست بسیار ارجمند و با ارزشم (eDvArDo (http://ariadl.ir/members/edvardo-134158/)) طی پیامی برنامه ای را معرفی کرده و در مورد آن
سوالاتی مطرح فرمودند .
من با خود برنامه کاری ندارم ولی نکته ای در این رابطه بشدت من را به فکر فرو برد.و آن این بود که کاربری برنامه ای
را بازسازی کرده و سپس تغییراتی در آن داده بود که که محاسن مختلفی داشت.

اولا"حجم برنامه بازسازی شده توسط ایشان کمتر از حجم برنامه اصلی بود. ثانیا" کار بر مورد بحث کاری کرده بود که
بتوان به سه طریق مختلف از آن استفاده کرد:
1. با اجرای فایل اصلی ، برنامه بصورت عادی نصب شده و اکتیو هم میشود.
2. در کنار فایل مورد بحث یک فایل Batch قرار داده بود که با اجرای آن برنامه بصورت مخفی و اکتیو شده نصب می شود.
3. و نیز فایل Batch دیگری هم گذاشته که با اجرای آن ، نوع پرتابل برنامه که قابل استفاده و اکتیو شده می باشد
ایجاد می شود.

اینکه او چگونه کاری کرده بود که برنامه نصب بتواند بفهمد که ما چه نوع نصبی میخواهیم ، و بر اساس خواسته ما
اجرا شود برایم سوال بزرگی بود.
و پیدا کردن جواب سوال واقعا" مشکل بود و روز های زیادی طول کشید.
با تجزیه و تحلیل فایل مورد بحث نتوانستم به نتیجه برسم ، چون اولا" ضد ویروسم فایل مورد بحث را ویروس شناسائی
میکرد و ثانیا" فایل مورد بحث توسط یک کاربر روسی و به زبان روسی طراحی شده بود و من نمیتوانستم از آن سر
در بیاورم.
لذا تا مدت ها بعد فقط توانسته بودم بفهمم که این برنامه توسط NSIS کامپایل شده است.
بیشتر که تحقیق کردم به یک سایت روسی رسیدم که که در آنجا تعداد دیگری از برنامه های باز سازی شده توسط
کاربر مورد بحث وجود داشت. چند صد مگا بایت هدر داده و اکثریت برنامه های بازسازی شده توسط ایشان را دانلود
کردم که شاید نکته اصلی را در یکی از آن ها متوجه شوم.
ولی بیفایده بود. تنها سرنخ بدست آمده همان بود که گفتم یعنی فقط فهمیدم که برنامه توسط NSIS کامپایل شده
است.
و در انتها بخودم گفتم که حالا که کاربری توانسته این کار را توسط NSIS انجام دهد ، پس نکته در خود برنامه NSIS
بوده و من باید آن را کشف کنم و جواب خیلی ساده بود.
===============
=========
تا به امروز با انواع متنوعی از Setup ساز ها آشنا شده ام که یکی از آن ها برنامه رایگان NSIS هست و به شدت عقیده
دارم که در آینده ، یکه تاز میدان Setup ساز ها ، برنامه رایگان NSIS خواهد بود.
این برنامه خیلی بیشتر از یک Setup ساز ساده بوده و یک کاربر با یاد گیری زبان اسکریپتی آن ، واقعا" میتواند هر کاری
انجام دهد.
همه Setup ساز های مطرح ،یک سری قابلیت ها دارند که از اول معلوم بوده و توسط سازنده اعلام شده است. و این
برنامه ها فقط میتوانند در محدوده همین قابلیت ها عمل کنند.
ولی برنامه NSIS اینگونه نیست. چون در صورت استفاده عادی مثل بقیه Setup ساز ها عمل کرده ولی اگر کاربری زبان
اسکریپی آن را یاد بگیرد ، میتواند قابلیت های متنوع دیگری به آن اضافه نماید.

گرچه متاسفانه مشتری نوشته های بنده عده قلیلی هستند ولی همین عده قلیل هر کدام برای خود استادی گرانقدر
هستند.
به این دوستان عزیزم توصیه میکنم که یکی دو ماه فرصت گذاشته و سعی کنند زبان اسکریپتی این نرم افزار را فرا گیرند.
اما بعد از این مقدمه طولانی:
در جلسه بعد چگونگی ساخت برنامه هائی مثل برنامه مورد بحث را یاد خواهیم گرفت.

Magsoud
02-22-2015, 11:49 AM
کاری که ما میخواهیم انجام بدهیم این است که:

مرحله اول: برنامه ای را انتخاب کنیم و تغییراتی درآن ایجاد نمائیم و آن را دوباره از نو بسازیم. ولی طوری که بعد از
ساخت مجدد ، اولا" حتی الامکان حجمش کمتر شده باشد و ثانیا" بعد از اجرا نیاز به اکتیو کردن نداشته و خودش
اکتیو شده باشد.

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

مرحله نهائی : فایل های حاصل از دو مرحله اول و دوم را طوری با هم مخلوط کرده و از کلشان یک فایل نصبی جدید
بسازیم که به شرح زیر عمل کند:
1. اگر خود فایل Setup ساخته شده ، بطور عادی اجرا شود برنامه بطور عادی نصب شده و اتوماتیک اکتیو شود.
2. اگر توسط یک فایل Batch (با سویچ S) ، فایل Setup ساخته شده را اجرا کنیم ، برنامه بطور مخفی نصب و اکتیو
شود.
3. اگر توسط یک فایل Batch دیگر (با سویچ P) ، فایل Setup ساخته شده را اجرا کنیم ، بجای نصب نوع پرتابل برنامه
ساخته شده و آماده استفاده شود.

در این آموزش میخواهیم که اعمال بالا را با استفاده از برنامه NSIS انجام دهیم. لذا برای درک مطالبی که توضیح داده
خواهد شد ، ضرورت دارد که کاربر با برنامه NSIS آشنا بوده و حداقل اطلاعات مقدماتی را در رابطه با این برنامه داشته
باشد.
چون اگر بخواهیم که تمام نکات را از صفر شروع و توضیح دهیم ، مدت زمان چند ماهه لازم خواهد بود که از حوصله
حقیر (بعلت مریضی و سن بالا) خارج است. و از طرف دیگر خود بنده هم برنامه NSIS را بطور کامل وارد نبوده و فقط
به اندازه رفع نیاز هایم بلدم.

من برای این آموزش برنامه CCleaner Pro 5.02.5101 را انتخاب کرده و نمونه فایل ساخته شده این برنامه، با مشخصات
گفته شده در بالا را با حجم 2.51 مگابایت در لینک زیر قرار دادم.

CCleaner.rar (http://www.mediafire.com/download/qs03linpktkl2d6/CCleaner.rar)

آن را دانلود و تست فرمائید تا کاملا" با نوع کار آشنا شوید.
در ادامه چگونگی ساخت فایل موجود در لینک بالا را صحبت خواهیم کرد.

Magsoud
02-22-2015, 09:04 PM
مرحله اول: تهیه فایل های مورد نیاز
===================
در اولین قدم لازم است که برنامه CCleaner Pro 5.02.5101 را که در اکثر سایت های ایرانی و خارجی موجود است
دانلود نموده و سپس آن را بطور عادی نصب و اکتیو کنید.
تمام فایل های برنامه درون پوشه ای بنام CCleaner داخل پوشه Program Files قرار گرفته اند.
یک کپی از پوشه CCleaner برداشته و جائی مثلا" در روت درایو D ذخیره کنید.
حالا دیگر نیازی به برنامه نصب شده نداشته و میتوانید آن را حذف نمائید.

ساختار برنامه CCleaner خیلی ساده است ، طوری که اگر ما پوشه D:\CCleaner را به هر کامپیوتر دیگری کپی کرده
و سپس فایل CCleaner.exe را از داخل آن اجرا کنیم ، خواهیم دید که برنامه کامل کار کرده و اکتیو هم هست.

اکنون پوشه D:\CCleaner را باز کنید. درون آن پوشه دیگری بنام Lang خواهید دید. این پوشه حاوی زبان های مختلفی
هست که برنامه میتواند با آن ها کار کند.ما فقط به زبان انگلیسی برنامه نیاز داریم. لذا وارد پوشه Lang شده و تمام
فایل های داخل آن بغیر از فایل lang-1065.dll را حذف کنید.
با این کار حجم برنامه حدود 2.5 مگا بایت کمتر خواهد شد.

تا اینجای کار ما اکثریت فایل های اولیه مورد نیاز برای ساخت پروژه را در اختیار داریم.لذا به مرحله دوم کار می رویم.

مرحله دوم: ساخت نوع پرتابل برنامه (به روش PortableApps.com)
===================================
در رابطه با ساخت برنامه های پرتابل بروش PortableApps.com قبلا" در همین انجمن ، در لینک زیر توضیح داده ام:

ساخت نرم افزارهاي پرتابل به شيوه PortableApps.com با "PortableApps.com Launcher 2.2" (http://ariadl.ir/thread165031.html)

مطابق روش توضیح داده شده در لینک بالا با استفاده از فایل های موجود در پوشه D:\CCleaner نوع پرتابل برنامه
CCleaner Pro 5.02.5101 را درست نمائید.

مرحله سوم: ساخت فایل اصلی برابر نیاز های گفته شده در اول بحث
=======================================
تازه به جائی رسیدیم که بنده بتوانم دادن پاسخ به سوال دوست ارجمندم (eDvArDo (http://ariadl.ir/members/edvardo-134158/)) را شروع بکنم.
در این مرحله ما تمام فایل های مورد نیاز پروژه مورد بحث را داریم .
اگر مطابق شروح داده شده عمل کرده باشید ، در حال حاظر باید محتوای زیر را داشته باشید:

1. پوشه D:\CCleaner که دارای محتوای زیر است:


D:\CCleaner\branding.dll
D:\CCleaner\CCleaner.dat
D:\CCleaner\CCleaner.exe
D:\CCleaner\uninst.exe
D:\CCleaner\Lang\lang-1065.dll


2. اگر نمونه پرتابل برنامه را در پوشه فرضا" D:\Portable CCleaner 5.02 درست کرده باشید. در حال حاظر این پوشه
دارای محتوای زیر است:


D:\Portable CCleaner 5.02\Portable CCleaner502.exe
D:\Portable CCleaner 5.02\Appdata\branding.dll
D:\Portable CCleaner 5.02\Appdata\CCleaner.dat
D:\Portable CCleaner 5.02\Appdata\CCleaner.exe
D:\Portable CCleaner 5.02\Appdata\Lang\lang-1065.dll


اگر دقت بفرمائید می بینید که فایل های داخل پوشه های D:\CCleaner و D:\Portable CCleaner 5.02 دقیقا" مثل
هم هستند و فقط فرق های زیر را دارند:

1. فایل uninst.exe در پوشه D:\CCleaner موجود ولی در پوشه D:\Portable CCleaner 5.02 وجود ندارد.
2. فایل Portable CCleaner502.exe در پوشه D:\CCleaner وجود نداشته ولی در پوشه D:\Portable CCleaner 5.02
وجود دارد.
3. نام پوشه ها متفاوت هستند.

اینکه نام پوشه ها متفاوت هستند مهم نیست چون در رابطه با این مسئله با کد نویسی NSIS مشکل را حل خواهیم
کرد.
و در کل برای پروژه مورد بحث، نیاز به همه فایل های داخل پوشه D:\CCleaner بعلاوه فایل Portable CCleaner502.exe
(که در پوشه پرتابل قرار دارد) داریم.
بنابر این اکنون که همه نیاز های اولیه آماده هستند ، مرحله آخر کارمان را در جلسه بعد انجام می دهیم.

نکته
=====
عمر که بالا می رود ، قاعدتا" وقت استراحت میرسد.
ولی همه جا اینگونه نیست.
اکثریت کسانی که مثل حقیر فکر میکنند ، بعد از بالا رفتن سن و تا آخرین نفس دیگر وقت استراحت ندارند
با بالا رفتن سن تازه مشکلات و مریضی ها شروع می شوند.
دریافتی ماهیانه ات ثابت است ولی هزینه هایت بالاتر میروند چون در جوانی بچه هایت بچه بودند ولی
الان وقتی پیشت بیایند یا اگر با تو زندگی کنند هم هزینه آن ها و هم تعدادشان بالا رفته.

در جوانی سالمی ولی در پیری هر ماه هزینه های دوا و دکتر رهایت نمیکنند
وووووووووووووووووووووو

پس بر من ایراد نگیرید که چرا مطالبم را تکه تکه و بمرور می نویسم و یکدفعه تمام نمی کنم.

Magsoud
02-23-2015, 09:11 PM
در اول بحث گفتیم که میخواهیم یک برنامه را دوباره باز سازی کنیم بطوریکه سه مشخصه زیر را داشته باشد:

1. اگر فایل ساخته شده را بطور نرمال اجرا کنیم ، برنامه بصورت عادی نصب و اکتیو شود.
2. اگر فایل ساخته شده را با دستور S/ اجرا کنیم ، برنامه بصورت مخفی نصب و اکتیو شود.
3. اگر فایل ساخته شده را با دستور P/ اجرا کنیم ، نوع پرتابل و اکتیو شده به ما تحویل داده شود.

توضیح : مشخصه دوم یعنی اجرای فایل نهائی با سویچ S/ نیاز به کد نویسی نداشته و هر فایل اجرائی ساخته شده
با برنامه NSIS ذاتا" این ویژگی را دارد

خوب ، بیائید کد نویسی با NSIS را شروع کنیم.
1. در روت درایو D پوشه ای بنام 00 درست کرده و سپس داخل پوشه D:\00 نیز پوشه دیگری بنام Files درست نمائید.
2. کلیه محتویات پوشه D:\CCleaner را به درون پوشه D:\00\Files کپی کنید.
3. فایل D:\Portable CCleaner 5.02\Portable CCleaner502.exe را هم به درون پوشه D:\00\Files کپی کنید.
4. یک آیکن برای فایل نهائی که ساخته خواهد شد تهیه و آن را با نام فرضا" mcs.ico درون پوشه D:\00 بگذارید.

اگر درست عمل کرده باشید ، باید محتوای زیر را در روت درایو D داشته باشید:


D:\00\mcs.ico
D:\00\Files\branding.dll
D:\00\Files\CCleaner.dat
D:\00\Files\CCleaner.exe
D:\00\Files\Portable CCleaner502.exe
D:\00\Files\uninst.exe
D:\00\Files\Lang\lang-1065.dll


=============
گفتیم که اولین خاصیت فایل نهائی باید این باشد که با اجرای آن ، برنامه CCleaner بطور عادی نصب شود.
پس می آئیم و اول کد های مربوط به نصب عادی برنامه CCleaner را می نویسیم:

برنامه notepad را باز کرده و کد های زیر را در آن تایپ نموده و سپس آن را با نام CCleaner.nsi درون پوشه D:\00
ذخیره کنید:


Outfile "CCleaner pro 5.02.exe"

!include "MUI.nsh"

!define MUI_ICON "mcs.ico"

!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "English"

InstallDir "$PROGRAMFILES\CCleaner"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails show

section

SetOutPath "$PROGRAMFILES\CCleaner"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\CCleaner.exe" "" "%ProgramFiles%\CCleaner\CCleaner.exe"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstal l\CCleaner" "DisplayIcon" "%ProgramFiles%\CCleaner\CCleaner.exe"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstal l\CCleaner" "DisplayName" "CCleaner 5.02.5101"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstal l\CCleaner" "DisplayVersion" "5.02.5101"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstal l\CCleaner" "UninstallString" "%ProgramFiles%\CCleaner\uninst.exe"

File "Files\branding.dll"
File "Files\CCleaner.dat"
File "Files\CCleaner.exe"
File "Files\uninst.exe"
CreateDirectory "$SMPROGRAMS\CCleaner"
CreateShortCut "$SMPROGRAMS\CCleaner\CCleaner.lnk" "$PROGRAMFILES\CCleaner\CCleaner.exe"
CreateShortCut "$SMPROGRAMS\CCleaner\Uninstall.lnk" "$PROGRAMFILES\CCleaner\uninst.exe"
CreateShortCut "$DESKTOP\CCleaner.lnk" "$PROGRAMFILES\CCleaner\CCleaner.exe"
CreateShortCut "$QUICKLAUNCH\CCleaner.lnk" "$PROGRAMFILES\CCleaner\CCleaner.exe"

SetOutPath "$PROGRAMFILES\CCleaner\Lang"
File "Files\Lang\lang-1065.dll"

sectionend


کد های بالا برای دوستانی که با برنامه NSIS تجربیاتی دارند ، واضح است ولی بهر حال مختصری توضیح می دهم:

_ در سطر اول کد به برنامه میگوییم که فایل نهائی را با نام CCleaner pro 5.02.exe درست کند.
_ با کد های سطور بعد تا عبارت section ، به NSIS میگویم که چه پنجره هائی به کاربری که میخواهد فایل نهائی را
اجرا کند ، نشان دهد و نیز میگوئیم که فایل ها را باید در پوشه ای بنامCCleaner درون پوشه Program Files قرار دهد.

_ با کد های مابین دو واژه section و sectionend به NSIS میگوییم که در حین نصب ،کدام فایل ها را باید در کجا ها
قرار داده و چه شورت کات هائی بسازد و وو............

این یک کد بسیار ساده است و من در آن ساده ترین روش را استفاده کرده ام.

حال اگر روی فایل D:\00\CCleaner.nsi کلیک راست کرده و گزینه Compile NSIS script را انتخاب کنید چند لحظه بعد
اگر اشکالی نباشد فایلی بنام CCleaner pro 5.02.exe در داخل پوشه D:\00 درست خواهد شد که اگر آن را اجرا کنید
برنامه CCleaner بطور عادی نصب خواهد شد.

تا اینجا شرط اول نیاز ما برآورده شد.برای اینکه شروط دیگر هم برآورده شوند لازم است که فایل D:\00\CCleaner.nsi
را با notepad باز کرده و کد های موجود در داخل آن را تغییر دهیم.
ولی قبل از گفتن کد ها ، لازم میدانم که مطالبی را شرح دهم تا راحت تر بتوانید کار کد هائی که خواهیم گفت را
متوجه شوید.

ما نیاز داریم که در داخل کد هایمان اعمال شرطی انجام دهیم.
یعنی باید بطریقی یه فایلمان بگوییم که اگر حالت x بود کار فلان را انجام بده و اگر حالت y بود کار بهمان را بکن.

در بحث این تاپیک ، ما میخواهیم که برنامه بتواند دستور داده شده توسط ما را شناسائی کرده و برحسب آن اجرا شود.
ما برای اینکار باید از دستورات شرطی و توابع موجود در NSIS استفاده کنیم.
اولین لازمه استفاده از این ویژگی ها این است که در سطور اول کدمان دو سطر زیر را اضافه کنیم:


!include LogicLib.nsh
!include FileFunc.nsh


دستوری بنام GetOptions وجود دارد که کارش دریافت اطلاعات موجود در دستورات خط فرمان است.ما از این دستور
در کد هایمان بهره خواهیم برد.
این فرمان با ترکیبی که عرض خواهم کرد ،میتواند بفهمد که آیا عبارت مورد نظر ما در خط فرمان وجود دارد یا نه.ولی
کاری برای ما انجام نمیدهد.
پس چگونه از این دستور استفاده کنیم؟
ما اول می آئیم و یک متغیر به NSIS معرفی میکنیم. وقتی متغیری را معرفی کردیم ، NSIS جائی را در حافظه کامپیوتر
مخصوص این متغیر درست میکند.
ما میخواهیم که فایل نهائی اگر ببیند دستوری با پارامتر P/ اجرا شده کار بخصوصی را انجام دهد. برای این منظور اول
به کد هایمان متغیری بنام فرضا" PP (یا هر عبارت دلخواه) معرفی می کنیم. این معرفی با عبارت Var انجام میشود
لذا برای معرفی متغیر PP کد زیر را وارد می کنیم:


Var PP


شاید بگویید برای چه باید متغیر معرفی کنیم؟
عجله نکنید. قضیه این است که ما میخواهیم به دستور GetOptions بگوئیم که فرضا" اگر دید داخل دستورات خط فرمان
پارامتر P/ قرار دارد آن را به ما خبر دهد.او برای اینکار فقط میتواند از متغیر های ذاتی برنامه NSIS استفاده کند.
این متغیر ها از پیش تعریف شده هستند.
لذا ما در کد هایمان به دستور GetOptions می گوئیم که فرضا" اگر دید پارامتر P در خط فرمان وجود دارد عدد 1 را داخل
متغیر ذاتی فرضا" 0 ذخیره کند.

و بعد با استفاده از کد های دیگر به برنامه میگوئیم که اطلاعات موجود در متغیر ذاتی 0 را در داخل متغیری که ما معرفی
کردیم (یعنی متغیر PP) قرار دهد.

حال که به اینجا رسیدیم میتوانیم آخرین مرحله کارمان را انجام دهیم یعنی به برنامه بگوئیم اگر داخل متغیر PP عدد 1
بود برنامه را بصورت پرتابل ارایه کند و اگر 1 نبود بطور عادی نصب کند.

میدانم مطلب مقداری گیج کننده شد. بهمین خاطر مقداری در مورد مطالبی که گفته شد فکر کنید و در جلسه بعد
کد نهائی را عرض میکنم.

Magsoud
02-24-2015, 02:55 PM
قبل از گفتن کد کامل لازم میدانم که کد هائی را که مشاهده خواهید کرد مختصرا" توضیح دهم.

__ با نوشتن کد Var PP به برنامه میگویم که اطاقکی را در حافظه کامپیوتر بنام آقای PP اجاره کند.

__ با نوشتن کد زیر به برنامه میگویم که خط فرمان را نگاه کند و ببیند که در آن پارامتر p/ وجود دارد یا نه و نتیجه را
در متغیر ذاتی 0 $ قرار دهد:


${GetOptions} $CMDLINE "/p" $0


__ با کد های زیر به برنامه میگویم که اگر محتوای متغیر ذاتی 0 $ ، بودن پارامتر p/ را نشان می دهد ، به اطاقک
اجاره شده آقای PP رفته و عدد 1 را در آن جا بگذارد ولی اگر محتوای متغیر ذاتی 0 $ ، نبودن پارامتر p/ را نشان
می دهد ، در اطاقک PP رفته و عدد 0 را قرار دهد:


${IfNot} ${Errors}
StrCpy $PP 1
${Else}
StrCpy $PP 0
${EndIf}


__ و با مابقی کد های بعدی به برنامه میگویم که اگر داخل اطاقک PP حاوی عدد 0 بود ، عمل نصب معمولی را انجام
داده و گرنه نوع پرتابل برنامه را ارایه کند.

در نهایت فایل D:\00\CCleaner.nsi را با notepad باز کرده و کد های موجود در داخل آن را بصورت زیر باید تغییر دهید:


!define PRODUCT_NAME "CCleaner"
!define PRODUCT_VERSION "502"

!include "MUI.nsh"
!include LogicLib.nsh
!include FileFunc.nsh

!define MUI_ABORTWARNING
!define MUI_ICON "mcs.ico"

!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "English"

Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
Outfile "CCleaner pro 5.02.exe"
InstallDir "$PROGRAMFILES\CCleaner"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails show
requestexecutionlevel user

Var PP

section
${GetOptions} $CMDLINE "/p" $0

${IfNot} ${Errors}
StrCpy $PP 1
${Else}
StrCpy $PP 0
${EndIf}

${If} $PP = 0

SetOutPath "$PROGRAMFILES\CCleaner"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\CCleaner.exe" "" "%ProgramFiles%\CCleaner\CCleaner.exe"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstal l\CCleaner" "DisplayIcon" "%ProgramFiles%\CCleaner\CCleaner.exe"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstal l\CCleaner" "DisplayName" "CCleaner 5.02.5101"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstal l\CCleaner" "DisplayVersion" "5.02.5101"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstal l\CCleaner" "UninstallString" "%ProgramFiles%\CCleaner\uninst.exe"

File "Files\branding.dll"
File "Files\CCleaner.dat"
File "Files\CCleaner.exe"
File "Files\uninst.exe"
CreateDirectory "$SMPROGRAMS\CCleaner"
CreateShortCut "$SMPROGRAMS\CCleaner\CCleaner.lnk" "$PROGRAMFILES\CCleaner\CCleaner.exe"
CreateShortCut "$SMPROGRAMS\CCleaner\Uninstall.lnk" "$PROGRAMFILES\CCleaner\uninst.exe"
CreateShortCut "$DESKTOP\CCleaner.lnk" "$PROGRAMFILES\CCleaner\CCleaner.exe"
CreateShortCut "$QUICKLAUNCH\CCleaner.lnk" "$PROGRAMFILES\CCleaner\CCleaner.exe"

SetOutPath "$PROGRAMFILES\CCleaner\Lang"
File "Files\Lang\lang-1065.dll"
${Else}
SetOutPath "$EXEDIR\CCleanerPortable"
File "Files\Portable CCleaner502.exe"
SetOutPath "$EXEDIR\CCleanerPortable\Appdata"
File "Files\branding.dll"
File "Files\CCleaner.dat"
File "Files\CCleaner.exe"
SetOutPath "$EXEDIR\CCleanerPortable\Appdata\Lang"
File "Files\Lang\lang-1065.dll"

${EndIf}

sectionend


با کامپایل کردن این فایل فایل حاصل برابر میل شما عمل خواهد کرد.
موفق باشید.

eDvArDo
02-24-2015, 03:37 PM
سلام

استاد عزيز، جناب مهندس شيرين‌زبان

از زحمات شما بسيار سپاسگزارم. اميدوارم لايق محبتهاي شما باشيم. اميدوارم خداوند به شما عمري باعزت، سلامتي و شادي عنايت بفرمايد. :^:

بنظر ميرسد که هرچه برنامه‌اي داراي فايلهاي بيشتري بعد از نصب باشد، اين کدنويسي طولاني‌تر و اگر برنامه مورد نظر ميبايست با سريال اکتيو بشود، پيچيدگي کدنويسي هم بيشتر خواهد شد!



ساختار برنامه CCleaner خیلی ساده است ، طوری که اگر ما پوشه D:\CCleaner را به هر کامپیوتر دیگری کپی کرده و سپس فایل CCleaner.exe را از داخل آن اجرا کنیم ، خواهیم دید که برنامه کامل کار کرده و اکتیو هم هست.

بنده متوجه نشدم که آيا برنامه موردنظر شما رايگان بود يا نسخه CCleaner Technician Edition ويا CCleaner Business Edition؟! (چون دو ورژني که نام بردم فقط نياز به اکتيو کردن دارند)

اي کاش برنامه اي ديگر که نياز به رجيست يا اکتيو کردن دارد، بصورت شرحي که در بالا داده‌ايد، قرار دهيد. :blush:

سپاس، استاد

Magsoud
02-24-2015, 03:56 PM
ادواردوی عزیز ، ضمن سپاسگزاری از محبتی که به حقیر دارید

1. بله در این روش اگر برنامه مورد نظر فایل های بیشتری داشته و نیاز به سریال و غیره داشته باشد ، کار سخت تر می شود.
2. جمله ای که در رابطه با برنامه CCleaner عرض کردم در رابطه با همه ورژن های برنامه صادق بوده ولی در این بحث نوع Pro
مورد نظر بود.
3. چشم سعی میکنم برنامه دیگری را هم توضیح دهم

Magsoud
02-26-2015, 12:29 PM
سال ها پیش برنامه کم حجمی بنام Registry Crawler دانلود کردم و از همان زمان این برنامه یکی از برنامه های مورد
علاقه ام بوده و خیلی از موارد به دردم خورده است.
این برنامه که آخرین ورژن آن Registry Crawler 4.5 است یک برنامه پولی بود و می بایست کد میدادیم تا اکتیو شود.
و برنامه بعد از وارد کردن کد، آن را در رجستری ذخیره می نمود.

متاسفانه نمیدانم به چه علتی چند سال پیش تولید این نرم افزار متوقف شد.
بعد از مشاهده درخواست دوست ارجمندم (eDvArDo (http://ariadl.ir/members/edvardo-134158/)) مبنی بر:


اي کاش برنامه اي ديگر که نياز به رجيست يا اکتيو کردن دارد، بصورت شرحي که در بالا داده‌ايد، قرار دهيد.

دنبال یک برنامه می گشتم که تصمیم گرفتم همین برنامه را به روش گفته شده در این تاپیک تبدیل کنم.
فایل نهائی ساخته شده این برنامه را (با حجم 422 کیلو بایت) پیوست کردم تا امتحان فرمائید تا بعد توضیحات لازم را
عرض کنم.

تذکر:
=========
برنامه پیوست به روش گفته شده در این تاپیک درست شده ولی یک فرق دارد و آن این است که برای ایجاد برنامه
پرتابل ، پارامتر P/ در خط فرمان جواب نخواهد داد.
برای اینکه من آن را طوری تنظیم کرده ام که برای ساخت برنامه پرتابل باید بجای پارامتر P/ از پارامتر من درآوردی
دیگری یعنی پارامتر "eDvArDo/" استفاده شود.
لذا اگر فایل Portable.cmd را نگاه کنید خواهید دید که در آن دستور زیر استفاده شده است:



"Setup.exe" /S /eDvArDo

این برنامه فقط با دستور بالا نوع پرتابل تحویل خواهد داد و اگر بخواهید آن را با پارامتر P/ استفاده کنید ، عوض ساخت
برنامه پرتابل ، فقط برنامه را بطور مخفی نصب خواهد کرد.

لطفا" برنامه را در هر سه حالت (اجرای تکی خود برنامه ، اجرا توسط Portable.cmd و توسط Silent.cmd) تست کنید.

eDvArDo
02-26-2015, 05:05 PM
سلام

استاد عزيزم، جناب مهندس شيرين‌زبان، فايل پيوست را دانلود کردم. هر سه روش به راحتي کار کرد و بسيار جالب بود.

اگه ميشد با دستوري اون پنجره سياه (command prompt Window) نمايش داده نميشد بهتر ميشد!

منتظر مراحل کاريم.

سپاس

Magsoud
02-27-2015, 05:54 PM
ادواردوی عزیز
برای ساخت فایلی که دانلود و امتحان کردی ، همه مراحل مثل همان است که در رابطه با CCleaner توضیح دادم.
فقط دو تا کار فرق دارد :
1. در کد نهائی بجای دستور :


${GetOptions} $CMDLINE "/p" $0


از دستور زیر استفاده کردم:


${GetOptions} $CMDLINE "/eDvArDo" $0


با این دستور برنامه برای اجرای پرتابل بجاری پارامترp/ دنبال عبارت eDvArDo/ خواهد گشت.

2. این برنامه برای اکتیو شدن نیاز به وارد کردن سریال دارد که آن را بصورت کد شده در رجستری ذخیره میکند. شما
باید برای نصب نرمال این فایل رجستری را اعمال نمائید.
فایل رجستری لازم را داخل پوشه RCrawler 4.5\portable با نام key.reg میتوانی ببینی.
باید در نصب عادی توسط کد های NSIS فایل رجستری key.reg را اعمال نمائی.

3. برای نصب پرتابل باید کاری کنی که موقع اجرا فایل key.reg اعمال شده و موقع بسته شدن برنامه فایل Undo.reg
که آن هم داخل پوشه پوشه RCrawler 4.5\portable قرار دارد اعمال شود.

اگر مشکلی بود خبر بده.
در ضمن دارم به روش دیگری از ساخت این برنامه فکر میکنم که اگر موفق شدم در همین جا اطلاع می دهم.

Magsoud
02-28-2015, 05:15 PM
نوع جدید و گرافیکی
می توانید از منوی زیر انتخاب کنید که نوع پرتابل برنامه را تولید کند و یا نصب مخفی و اکتیو انجام دهد.

http://www.worldup.ir/images/934401k1fa4tqtu0zmql.png (http://www.worldup.ir/)

eDvArDo
03-01-2015, 09:17 AM
سلام

استاد عزيزم، جناب مهندس شيرين‌زبان:

1- چيزي که فرموديد پيوست نفرموديد

2- آيا همان دو فايل بچ و فايل اصلي همچنان خواهند بود؟ اگر اينطور هست، آيا ميشود همه آنها را بصورت يک فايل درآورد؟ (الان که فکر ميکنم ميبينم ميشود! با WinRAR به يک فايل SFX تبديل کنيم)


سپاس

SetupEditor
03-01-2015, 11:12 AM
با سلام و درود
ببخشید اساتید بنده هم نظر میدم
صد البته که ما تجربه شما را نداشته

اما جدیداً آنتی ویروس ها Avast به فایل های ساخته شده SFX ی که با وینرر Winrar ساخته شده گیر داده و فایل را حذف می کنند

جسارت نباشه !
استاد
کاش که اموزش های خود را بصورت تصویری و قدم به قدم بگذارید

اساتیدی مانند : جناب آقای
eDvArDo که متوجه موضوع شدن لطفاً یه آموزش تصویری قرار بدن
با تشکر از توجه شما

Magsoud
03-01-2015, 01:43 PM
- .. پيوست نکردید

2- آيا همان دو فايل بچ و فايل اصلي همچنان خواهند بود؟ اگر اينطور هست، آيا ميشود همه آنها را بصورت يک فايل درآورد؟ (الان که فکر ميکنم ميبينم ميشود! با WinRAR به يک فايل SFX تبديل کنيم)

اگر منظورتان نوع تصویری هست ، بله هنوز پیوست نکرده ام.
در این نوع دیگر از فایل Batch استفاده نمی شود. بلکه با استفاده از کد های NSIS با کلیک کردن روی
هر دگمه کار مربوطه انجام میشود.
از winRAR SFX و غیره استفاده نشده است.
بهر حال پیوست شد:

http://www.worldup.ir/images/fyz53anrmkoqh4z0ce7l.png (http://www.worldup.ir/)




اما جدیداً آنتی ویروس ها Avast به فایل های ساخته شده SFX ی که با وینرر Winrar ساخته شده گیر داده و فایل را حذف می کنند


بله متاسفانه این مسئله در رابطه با بعضی از فایل های NSIS و autoit هم وجود دارد.
برای مثال همین فایل ساخته شده با روش توضیح داده شده ، از نظر بعضی آنتی ویروس ها ویروس محسوب می شود.



اساتیدی مانند : جناب آقای
eDvArDo

که متوجه موضوع شدن لطفاً یه آموزش تصویری قرار بدن


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

این زمان و زحمت مهم نیست ، مسئله اینجاست که فرضا" خود جنابعالی ، الان اتفاقی بعد از مدت ها به انجمن سر زده
این مطلب را دیده و سوالی مطرح می فرمائید.
ولی ما بعد از جواب می بینیم تا چند ماه خبری از شما نیست.
و این شوق کار را می گیرد.

Magsoud
03-01-2015, 05:58 PM
توضیح در مورد فایلی که در پست قبلی پیوست کردم:

منوی این برنامه را توسط برنامه NSIS Dialog Designer درست کرده ولی کد های انجام کار را خودم اضافه کرده ام.
چون برنامه NSIS Dialog Designer فقط میتواند دیالوگ را درست کند و کاربر باید بتواند به کد های این برنامه ، کد
های خودش را اضافه نماید.

NSIS Dialog Designer (http://www.softpedia.com/get/Programming/Other-Programming-Files/NSIS-Dialog-Designer.shtml)

SetupEditor
03-03-2015, 12:06 PM
با سلام و درود
خدمت اساتید و عزیزان

استاد حق دارند که از بنده گله داشته باشند !
بنده در کافی نت مشغول به کارم !
و با ماهی 250 هزار تومان زندگی متأهلی را می گذرونم !
به دلیل پاسخگویی به مشتریان کمتر به این انجمن عزیز سر می زنم !
در منزل هم با Dial Up به انجمن سر می زنمشاید نباید اینجا مطرح بشه
اما در انجمن قبلی Pc4You
پستی اگر تشکر می خورد یا ادامه داده می شد بالا قسمت جهت اطلاع شما نمایش داده می شد
و این باعث بود تا کاربر بتواند پست هایی که مشترک شده یا تشکر گرفته را بدون رفتن به قسمت اشتراک ها بازدید نماید و اطلاع پیدا کند راستی استاد این برنامه چه جوری کار می کنه ؟

با این که Nsis نصبه و مسیر Nsis را به برنامه معرفی کردم

هر چی دکمه New می زنم فایلی با پسوند Nsddef که همون Dialog Definition را از ما طلب می کنه نمیدونم بخاطر 64 بیتی بودن این ویندوز 8 ی که ما در کافی نت استفاده می کنیمه یا مشکل جای دیگه ای یه و این عملکرد از نظر بنده خیلی عجیبه ؛ مگر میشه دکمه های New و Open هر دو یک کار را انجام بدن
هر دو نسخه 1.3.2 , 1.3.1 این عملکرد را دارند

بازم از استاد و دیگر عزیزان برای کم رنگ شدن حضورم عذر خواهی می کنم

Magsoud
03-03-2015, 12:55 PM
در این برنامه وقتی دگمه New را بزنی ، صفحه ای باز خواهد شد.
در آن جا برای پروژه جدیدت نامی تعیین کن.
برنامه یک صفحه با دیالوگ خالی باز خواهد کرد که میتوانی به آن دگمه ها و یا دیگر کنترل ها را اضافه کنی.

موقعی هم که Open را بزنی دوباره صفحه ای باز خواهد کرد که شما باید پروژه قبلی خود با این برنامه را انتخاب
کنید تا باز کند که بتوانید در آن تغییرات بدهید.

Mohamad
03-03-2015, 03:00 PM
اما در انجمن قبلی Pc4You
پستی اگر تشکر می خورد یا ادامه داده می شد بالا قسمت جهت اطلاع شما نمایش داده می شد
و این باعث بود تا کاربر بتواند پست هایی که مشترک شده یا تشکر گرفته را بدون رفتن به قسمت اشتراک ها بازدید نماید و اطلاع پیدا کند[/SPOILER]

درود
با عرض پوزش از دوستان بابت انحراف از موضوع و همچنین با اجازه از استاد چون مورد به بنده مربوط میشه توضیح میدم
دوستان توجه کنند چه اضافه کردن و چه کم کردن امکاناتی به درخواست خود شما صورت میگیره پس حذف مورد یاد شده و یا غیر فعال شدن گزینه لایک و ... با درخواست دوستان در گذشته بوده پس اگر نیاز به فعال شدن و یا اضافه شدن امکاناتی دارید در بخش درخواست اعلام کنید در صورت موافقت اکثریت اضافه میشه و یا حذف میشه و هدف اصلی رضایت شما در محیطی هست که کار میکنید .
مورد دیگر در مورد درآمدزایی هست که همین جا مجددا اعلام میکنم متاسفانه خود شما دوستان زیاد رغبتی به درآمدزایی ندارید وگرنه قبلا توضیح داده بودم که بنده میتونم امکانات را فراهم کنم و هزینه کلیه امکانات لازم را مجموعه میتونه به راحتی فراهم کنه ولی وقت لازم را ندارم و آپدیت و سایر موارد که قبلا توضیح دادم و اینجا مکان مناسبی برای تکرار نیست به عهده خودتان اگر بخواهید خواهد بود و تنها امکانات و پشتیبانی فنی را میتونم فراهم کنم .
با پوزش مجدد
ارادتمند همگی دوستان
محمد

Magsoud
04-01-2015, 03:15 PM
eDvArDo (http://ariadl.ir/members/edvardo-134158/) عزیز ، دلم میخواست بدانم که آیا اولا" جواب سوالت در پست اول را متوجه شدی ؟ و ثانیا" آیا موفق شدی
که برنامه Multi Setup گرافیکی مطابق مثالی که قرار داده بودم بسازی یا نیاز به توضیحات بیشتری هست.

سوال کردم چون مدت زیادی هست که در رابطه با این تاپیک همه سکوت کردند. که نمیدانم آیا توضیحات بنده ناقص بود
یا همه متوجه مطلب شدند.

eDvArDo
04-01-2015, 04:39 PM
سلام بر استاد عزيزم

تا جاهايي ادامه دادم ولي بدليل اينکه تمرکز و وقت پيوسته ندارم نتونستم تا آخر ادامه بدم و اگه بخوام از اين به بعد ادامه بدم بايد باز از اول شروع کنم که فعلاً برام مقدور نيست!

اميدوارم شما اگه تونستيد روش جديدي که فرموديدرو اينجا توضيح بديد.

سپاس

Magsoud
04-02-2015, 03:59 PM
بعد از دیدن یادداشت شما و با توجه به اینکه فرمودید این روز ها کمتر فرصت دارید، تصمیم گرفتم که یک الگوی عمومی
برایتان درست کنم.
و دیشب یک نمونه عمومی درست کردم ، که با استفاده از آن شما دیگر لازم نخواهد بود که زمان زیادی صرف ساخت
اینگونه پروژه ها بکنید.

ولی فعلا" فقط نمونه فایل نهائی را با حجم 401 کیلو بایت پیوست کردم تا امتحان فرمائید و نظرتان را بدهید:

http://www.worldup.ir/images/wz2odyd4w9jecw0ef0yg.png (http://www.worldup.ir/)