PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : الگوی ساخت برنامه نصب با استفاده از nsis



Magsoud
03-12-2012, 09:18 PM
سلام
برنامه NSIS یا بطور کامل تر Nullsoft Scriptable Install System یک برنامه نصب بسیار قدرتمند است که همه کار
ها را بر اساس زبان اسکریپت مخصوص خودش انجام میدهد.
برنامه ای رایگان و open source بوده و کار کردن با آن بسیار راحت و دلنشین است.در همه ویندوز ها کار میکند و
اکثریت زبان ها حتی فارسی را هم ساپورت مینماید.
در اصل توسط سازندگان برنامه محبوب WinAmp ساخته شده و بسیار انعطاف پذیر است.
ولی یک اشکال کلی دارد ، و آن این است که این برنامه صفحه گرافیکی (GUI) ندارد و کاربر بایستی اول اسکریپت
های این برنامه را یاد گرفته و بعد دستورات را در یک فایل متنی بنویسد.
البته برای کار با این برنامه وافعا" عالی دهها برنامه مختلف نوشته شده است.

امروز میخواهیم یک الگو بسازیم که هر کسی حتی بدون داشتن کوچکترین اطلاعاتی از اسکریپت نویسی NSIS
بتواند به راحتی و در یک دقیقه فایل نصب مورد علاقه اش را بسازد. البته بنده نصب نوع مخفی را مختصرا" توضیح
خواهم داد.
-----------------------------
ما زمانی میخواهیم یک فایل نصب بسازیم که تعدادی فایل از قبل یرای منظور های مختلف ساخته و یا داشته
باشیم و بخواهیم همه این ها را به یک فایل EXE تبدیل کنیم که با اجرای آن فایل ، فایل های ما در جا های
بخصوصی از سیستم قرار بگیرند و در صورت نیاز تنظیماتی را در سیستم اعمال کرده و یا تنظیماتی از سیسنم
را عوض کنیم. و و و...
لذا در این آموزش ، بنده مفروضات زیر را خواهم داشت (در انتهای آموزش فایل های بکار گرفته در این تاپیک را هم
جهت استفاده شما عزیزان آپلود خواهم نمود).
فر ضا" ما فایل ها و پوشه های زیر را داریم و میخواهیم آن ها را به یک فایل EXE تبدیل کنیم:
__ فایلی بنام Thank you.exe
__ فایلی بنام USB Port Locked.exe
__ فایلی بنام ColorCop.exe
__ پوشه ای بنام spider که داخلش فایلی بنام spider.exe قرار دارد.
__ پوشه ای بنام Starter که داخلش فایلی بنام Starter.exe قرار دارد.

اما چکار میخواهیم بکنیم:
__ همه این ها را تبدیل به یک فایل EXE بنام setup.exe بکنیم.
__ فایل setup.exe باید آیکن مورد نظر ما را داشته باشد.
__ با اجرای setup.exe بایستی کار های زیر انجام شود:
1. مرحله نصب مخفی باشد و دیده نشود.
2. پوشه ای بنام MyTool داخل پوشه Program Files درست شود.
3. پوشه های نامبرده در بالا یعنی پوشه های spider و Starter با محتویاتشان داخل پوشه MyTool که در شماره 2
گفتیم قرار بگیرند.
4. داخل پوشه Windows پوشه ای بنام Needs ساخته شود و فایل ColorCop.exe داخل آن قرار بگیرد.
5. فایل USB Port Locked.exe در داخل پوشه system32 قرار بگیرد.
6. در دسکتاپ و استارت منو و Quick Launch شورت کات های همه فایل های ما درست شوند.
7.در داخل پوشه MyTool درون Program Files ، یک فایل بنام uninst.exe ساخته شود که اگر آن را اجرا کنیم
فایل های نصبی ما را از سیستم Uninstall نماید.
8. در داخل پوشه MyTool یک لینکی وجود داشته باشد که اگر اجرایش کنیم سایت مورد نظر ما را باز کند.
9. موقع Uninstall کردن رد پای برنامه ما را از رجستری پاک نماید.

خوب تا اینجا فهمیدیم که چی داریم و چکار میخواهیم بکنیم.

در فرصت بعدی بقیه داستان را عرض خواهم کرد.

Magsoud
03-13-2012, 04:48 PM
سلام
دوستان کار خیلی ساده است . برای انجام این پروژه لازم است که کاربر قبلا" برنامه NSIS و پلاگ این رجستری
مربوطه را نصب کرده باشد.NSIS و پلاگ این لازم را با حجم 1.53 مگا بایت در لینک زیر آپلود کرده ام.
NSIS.rar
ShiftFile - Free File Hosting and File Sharing (http://shiftfile.com/6BmrAT)
تمام فایل ها و پوشه هایی که در جلسه قبل نام بردم ،بعلاوه دو عدد آیکن و یک فایل بنام MyTool.nsi را در لینک
زیر آپلود کردم (MyTool.rar حجم 950 کیلو بایت) ، که در سطور بعد در موردشان صحبت خواهم کرد.
MyTool.rar
ShiftFile - Free File Hosting and File Sharing (http://shiftfile.com/oAUFRU)
با فرض اینکه شما فایل فشرده بالا را دانلود کرده و از فشردگی درآورده اید الان باید پوشه ای با نام MyTool در
جلوی شما باشدکه حاوی تمام فایل های لازم این مبحث میباشد.

تمام کد هاییکه برای ساخت این پروژه لازم است را در فایل MyTool.nsi موجود در داخل پوشه MyTool نوشته ام.
یعنی اگر در این زمان برنامه NSIS و پلاگ این مربوطه را در سیستم نصب کرده باشید فقط کافی است که روی
فایل MyTool.nsi کلیک راست کرده و روی گزینه Compile NSIS script کلیک کنید.
در عرض چند ثانیه فایلی بنام setup.exe داخل پوشه MyTool ساخته خواهد شد که این فایل به تنهایی تمام
فایل ها را دارد و اگر شما فقط این فایل را برده و در هر سیستمی اجرا کنید نصب شده و تمام کار هایی را که در
جلسه قبل گفتم انجام خواهد داد.

ولی برای اینکه شما بتوانید این کار را با برنامه های مورد نظرتان انجام دهید ، و یا چیز هایی به این پروژه اضافه
و یا از آن کم کنید، لازم است که به شرح کد های داخل فایل MyTool.nsi که در زیر خواهم گفت توجه نمایید.

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

اما شرح کد های فایل MyTool.nsi
--------------------------------------
فایل MyTool.nsi یک اسکریپت متنی است یعنی میتوانید این فایل را با notepad باز کرده و تمام کد هایش را ببینید.
البته من پیشنهاد میکنم که جهت دیدن هر فایلی که متنی بوده ولی حاوی کد های اسکریپت و یا کد های زبان
های برنامه نویسی است ، بجای notepad از برنامه رایگان وبسیار عالی بنام ++notepad استفاده نمایید.

بهر حال اگر فایل مورد نظر را با برنامه ++notepad باز کنید خواهید دید که این فایل از تعداد 111 سطر کد تشکیل
شده است.
دقت کنید که برنامه NSIS این 111 سطر را بترتیب از سطر 1 شروع کرده و یک به یک اجرا خواهد کرد تا به آخر برسد.

__ قسمت اول کد را در زیر مشاهده میکنید:

; Made by M_Shirin zaban.

; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "MyTool"
!define PRODUCT_VERSION "1.0"
!define PRODUCT_PUBLISHER "p30ask group"
!define PRODUCT_WEB_SITE "http://forum.p30ask.com/"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\Thank you.exe"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstal l\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"

سطر اول کد های بالا فقط یک شرح یا توضیحات است که بنده در این مثال نوشته ام که اسکریپت توسط شیرین زبان
نوشته شده. شما میتوانید هر چه دوست داشتید در این سطر بنویسید و یا حتی این سطر را کاملا" حذف کنید.

سطر 2 خالی بوده و سطر 3 هم فقط توضیحات است. در کل هر سطری که با علامت ; شروع شده باشد، توضیح بوده
و شما میتوانید تمام سطوری را که اولشان علامت ; وجو دارد را حذف کنید بدون اینکه تاثیری در کار نهایی داشته باشد.
سطور 4 تا 7 مشخصات فایل نهایی ساخته شده شماست که بشرح زیر است:
__ در سطر 4 مابین علایم " " باید نام مورد نظرتان را برای برنامه خود بنویسید. که من در این مثال از نام MyTool استفاده
کرده ام. وجود این سطر ضروری است ، شما میتوانید در این قسمت هر نام دلخواه خود را بنویسید ولی نمیتوانید این
سطر را حذف کنید.
__ سطو ر 5و 6 و 7 کد بالا ورژن ، سازنده و سایت سازنده را مشخص میکند. میتوانید این مشخصه ها را بدلخواه عوض
کرده و یا میتوانید این سه سطر را حذف نمایید.
__ سطور 8 و 9 و 10 تنظیمات برنامه ما را در رجستری مشخص میکنند. میشود این سه سطر را هم حذف کرد و مشکلی
پیش نخواهد آمد ولی برای استاندارد بودن برنامه ، بهتر است استفاده کنیم.توضیحا" عرض کنم که وقتی برنامه ای
مثلا" WinAmp را در سیستممان نصب میکنیم ، این برنامه در یک جایی از رجستری سیستم (مثل سطر 8 بالا )
جایی در رجستری ساخته و در آن جا نام فایل اجرایی خودش را می نویسد. در این مثال چون یک مثال واقعی نبوده و ما
فایل اجرایی اصلی نداریم لذا بنده در این قسمت نام Thank you.exe را نوشته ام. البته عرض کردم که میتوانید این
سطور را حذف کنید.
در صورتیکه از سطر 8 استفاده میکنید وجود سطور 9 و 10 لازم است که برای پاک کردن رد پای برنامه ما در رجستری در
زمان Uninstall کردن استفاده میشوند و نیازی نیست که در این دو سطر تغییری بدهید.

قسمت بعدی کد های مورد بحث بصورت زیر است:

Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "setup.exe"
InstallDir "$PROGRAMFILES\MyTool"
Icon "Install.ico"
UninstallIcon "UnInstall.ico"
SilentInstall silent
SilentUninstall silent
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""

با سطر 1 از کد های بالا هیچوقت کاری ندارید
در سطر 2 بایستی مابین علایم " " نامی برای فایل نصب نهایی که ساخته خواهد شد بنویسید که بنده در این مثال
از نام setup.exe استفاده کرده ام. ولی شما میتوانید هر نام دلخواه خود را بنویسید.
در سطر 3 باید دایرکتوری اصلی برای نصب برنامه خود را مشخص کنیم. برنامه بصورت پیشفرض همه برنامه ها را داخل
پوشه Program Files میریزد. و در اینجا فقط لازم است که ما نام پوشه ای را که میخواهیم برنامه ما در آن پوشه ریخته
شود را مشخص کنیم که همانطور که می بینید ،بنده نام MyTool را استفاده کرده ام.
این بدان معنی است که برنامه نصب باید پوشه ای بنام MyTool در داخل Program Files درست کرده و فایل های بنده
را داخل آن قرار دهد.

در سطر 4 به برنامه میگوییم که از کدام آیکن برای فایل نصبی که میسازد استفاده کند که در این مثال نام فایل
Install.ico را نوشته ام. از طرف دیگر برنامه خودش برای زمانیکه بخواهیم برنامه را UnInstall کنیم یک فایل UnInstall
درست خواهد کرد که ما در سطر 5 به برنامه میگوییم که از آیکن UnInstall.ico برای آن استفاده کند.
توضیح اینکه آیکن های مورد استفاده برای نصب و عزل باید مشخصات یکسانی داشته باشند و نیز هر دو باید در
دایرکتوری ای باشند که فایل MyTool.nsi قرار دارد.

با سه سطر 6 و7 و 8 بالا کاری نداریم که نوع نصب و عزل برنامه را مشخص میکنند.

تا اینجای کار کد های اولیه لازم (مشخصات اولیه برنامه) را نوشته ایم. در مرحله بعدی باید کد های کار هایی را
که برنامه باید انجام دهد را بنویسیم

که سعی میکنم در فرصت بعدی شرح دهم.

borhan_3010
03-13-2012, 05:04 PM
سلام
جناب شیرین زبان مزیت استفاده از این برنامه نسبت بقیه چیه؟
مثلا من یه برنامه 1.6 مگی با نام Smart Install Maker میشناسم که تو یه محیط گرافیکی میشه به راحتی و بدون دانش خاصی Installer ساخت باهاش (تو پست 17 اینجا (http://forum.p30ask.com/thread110885-2.html#post247546) یه آموزش نوشتم براش) چرا nsis؟ هدف آموزش هستش یا برتری خاصی داره؟

Magsoud
03-13-2012, 05:15 PM
سلام
جناب شیرین زبان مزیت استفاده از این برنامه نسبت بقیه چیه؟
مثلا من یه برنامه 1.6 مگی با نام Smart Install Maker میشناسم که تو یه محیط گرافیکی میشه به راحتی و بدون دانش خاصی Installer ساخت باهاش (تو پست 17 اینجا (http://forum.p30ask.com/thread110885-2.html#post247546) یه آموزش نوشتم براش) چرا nsis؟ هدف آموزش هستش یا برتری خاصی داره؟
سلام
برهان جان، این برنامه خیلی قوی است و آنقدر ارزش دارد که توسط شرکت های بزرگ و معتبر دنیا استفاده میشود
یکی از حسن هایش حداقل تا الان این است که نمیتوانی کد های این برنامه (دستوراتیکه انجام میدهد )را شناسایی
کنی ودر بیاوری.
حجم فایل نهایی ساخته شده با این برنامه خیلی کم است. با شناخت کد هایش براحتی میتوان تغییراتی را در سیستم
انجام دادکه هیچ کسی نتواند متوجه شود.
من فکر میکنم اگر ، علاقه استفاده کنندگان این برنامه بهمین صورت جلو برود، برنامه تکمیل تر شده و ده سال بعد یکه تاز
اینستالر ها خواهد شد.

از طرف دیگر ، فردی مثل شما باید با این برنامه و دیگر برنامه های مشابه کار کرده و آشنا باشد.(حداقل مثل بنده که حدود 30
درصد این برنامه را میدانم).

n1ma
03-13-2012, 05:28 PM
درود
پس این نرم افزار تنها نزد من محبوب نیست!!:d: من این نرم افزار را چند سال پیش به طور اتفاقی در سایت تبیان پیدا کردم و از ان موقع تابحال برایم کار می کند!!
به نظرم همانطور که در بالا به ان اشاره شد این نرم افزار در نوع خود می تواند یک اسکریپت NSIS یاشد.
چرا که این نرم افزار حتی قابلیت هایی مانند انجام دستورات پس از خروج نرم افزار که در اسکرپیت NSIS از استفاده می کنیم را نیز داراست.
در قسمت Commands میتوانید دستورات خود را از طریق یک فایل بدهید و تیک Wait Until Application Finishes را بزنید وووو
البته یک بخش جالبتر ان بخش فایل های INI است که اگر کار ان را بلد باشید می توانید کارهای زیادی انجام بدهید.
متاسفانه برای این نوع فایل ها مرجع کاملی مثل دیگر فایل ها مثلا Batch وجود ندارد:afd:

Magsoud
03-13-2012, 06:08 PM
سلام
درست گفتی نیما جان
در مورد استفاده بصورت ini ، من که نتوانستم سر دربیاورم البته یک برنامه پرتابل را که با روش ini
ساخته شده دارم ولی هنوز فرصت مطالعه اش پیدا نشده.و در ضمن از این برنامه هم چون اسکریپت
کد را نداریم هم چندان چیزی نمیشود فهمید.

Magsoud
03-15-2012, 03:03 PM
سلام
دوستان ،تا الان ما فقط مشخصات عمومی برنامه خود را به NSIS توضیح دادیم.حال باید کار های زیر را انجام دهیم:
1.بهش بگوییم که الان تک تک فایل های ما اسمشان چیست و در حال حاضر کجا قرار دارند .
2. بگوییم که این فایل ها که معرفی کردیم را موقع نصب در کجا های سیستم کاربر استفاده کننده باید قرار دهد.
3. بگوییم در حین نصب یا بعد از نصب چه تفییراتی را در سیستم کاربر اجرا کند.
4.بگوییم برای فایل های برنامه ما شورت کات هایی در استارت منو و جا های دیگر درست کند.
5. و هر نیاز دیگری که داریم.

عزیزان من ، توجه داشته باشید که همانطوریکه قبلا" هم عرض کردم NSIS کد های نوشته شده توسط ما را سطر
به سطر خوانده و بترتیب اجرا میکند. یعنی اول دستور سطر 1 را اجرا میکند و بعد سطر 2 و الی آخر.
لذا ما باید ترتیب دستورات خود را بر اساس نیاز هایمان قرار دهیم. اما نکته دیگری که در کد اسکریپت NSIS وجود دارد
این است که قسمت اول کد (همانطور که در جلسات قبلی دیدیم) ، معرفی مشخصات برنامه است.ولی قسمت دوم
کد دادن دستورات اجرایی است.
NSIS دستوراتی را اجرا میکند که این دستورات ما بین دو عبارت Section و SectionEnd نوشته شده باشند.و هر
مطلبی را که مابین این دو عبارت نبیند، فکر میکند که این یک مشخصه است.
لذا ما باید تمام خواسته هایمان را مابین این دو عبارت بنویسیم.
پس برنامه NSIS در ساده ترین شرایط ،حد اقل دارای یک Section خواهد بود. ولی معمولا" دارای Section های متعددی
خواهد بود که هر Section یک کار دیگری را انجام میدهند ( در مثال ما هم دارای چندین Section هستیم که در سطور
زیر توضیح خواهم داد.)
توجه داشته باشید که هر Section نامی دارد و نمیشود دو تا Section هم نام در یک کد اسکریپت داشته باشیم. و با
مطالعه سطور زیر خواهید دید که کد های داخل Section های مختلف هم ساده و راحت هستند.
------------------------------------
Section اول در مثال ما
------------------------
به کد زیر توجه کنید:

Section "sec_01"
SetOutPath "$INSTDIR\spider"
SetOverwrite on
File "spider\spider.exe"
CreateDirectory "$SMPROGRAMS\Tools"
CreateShortCut "$SMPROGRAMS\Tools\spider.lnk" "$INSTDIR\spider\spider.exe"
CreateShortCut "$DESKTOP\spider.lnk" "$INSTDIR\spider\spider.exe"
SetOutPath "$INSTDIR\Starter"
File "Starter\Starter.exe"
CreateShortCut "$SMPROGRAMS\Tools\Starter.lnk" "$INSTDIR\Starter\Starter.exe"
CreateShortCut "$SMPROGRAMS\Tools\Uninstall.lnk" "$INSTDIR\uninst.exe"
SetOutPath "$INSTDIR"
SetOverwrite try
File "Thank you.exe"
CreateShortCut "$STARTMENU\Thank you.lnk" "$INSTDIR\Thank you.exe"
SectionEnd

می بینید که این کد با کلمه Section شروع و با کلمه SectionEnd تمام شده است. کد های نوشته شده مابین این
دو عبارت کار هایی است که ما میخواهیم . گفتیم که برنامه کد ها را بترتیب اجرا خواهد کرد ، پس ما در این Section
دستوراتی را قرار میدهیم که اول نصب باید انجام شوند.

در سطر 1 از کد بالا نام Section ما بین علایم " " مشخص گردیده است که در این مثال sec_01 میباشد.

در جلسه قبلی به برنامه گفتیم که فایل های اصلی ما را باید داخل پوشه ای بنام MyTool داخل پوشه Program Files
قرار بدهد. برنامه این آدرس را با کد INSTDIR$ می شناسد. یعنی کد INSTDIR$ را معادل Program Files\MyTool
میداند.
لذا وقتی در سطر 2 می نویسیم INSTDIR\spider می فهمد که باید پوشه Program Files\MyTool\spider را بسازد.

در سطر 4 فایلی را که برنامه باید آن را داخل پوشه ساخته شده بگذارد (در این مثال spider.exe ) را مشخص میکنیم.
توجه داشته باشید که در این جا آدرس محلی را می نویسیم که فایل مورد نظر ، الان در کامپیوتر ما وجود دارد.
فراموش نکنید که برنامه آدرس داخل کامپیوتر ما را از جایی شروع میکند که فایل MyTool.nsi قرار دارد.

حال که فایل spider.exe را در محلش قرار دادیم ، تصمیم میگیریم که پوشه ای در منوی استارت درست کرده و داخل
آن شورت کاتی را برای این فایل بگذاریم.
در سطر 5 به برنامه میگوییم پوشه ای بنام Tools در منوی استارت قسمت Programs با نام Tools ساخته و در سطر
6 به برنامه میگوییم نام این شورت کات spider.lnk باشد.

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

کار هاییکه در قسمت های بعدی کد انجام میشود هم به همین روشی که توضیح داده شد میباشد.

نمونه ساخته شده این مثال با حجم 1.11 مگا بایت در لینک زیر آپلود شده است.که میتوانید دانلود و امتحان نمایید.
ShiftFile - Free File Hosting and File Sharing (http://shiftfile.com/KJdPjW)

موفق باشید.

borhan_3010
04-12-2012, 04:11 PM
درود
دوتا سوال کوچولو:
درایو ویندوز تو Nsis چی میشه؟
WINDIR$ که میشه C:\Windows
مثلا مسیر زیر چی میشه:
C:\ProgramData
من نمی خوام از عبارت C استفاده کنم چون ممکنه ویندوز در درایوی غیر از C نصب شده باشه!

سوال دیگه:
برنامه Nsis دونسخه ANSI و Unicode تفاوت شون چیه و از کدوم یکی استفاده کنیم؟

و یه سوال خیلی خیلی خیلی مهم!!
بعضی از برنامه بعد از اجرا علاقه دارن که به سرورشون وصل بشن! این کار مشکلاتی رو در پی داره که مهم ترین اون احتمال به هم خوردن کرک و سریال برنامه اس!
ولی اگه Ip سرور اش رو با فایروال دربیاریم و در فایل hosts قرار بدیم دیگه برنامه نمی تونه به سرورش وصل بشه! (فرض ما بر اینه که این برنامه قراره تو سیستمی اجرا بشه که فایروال نداره ...)
با ویرایش فایل hosts در مسیر C:\Windows\System32\drivers\etc قرار داره و میشه با Notepad ویرایش کرد!
من دستورات زیر رو براش در نظر گرفتم:


FileOpen $0 "$SYSDIR\drivers\etc\hosts" a
FileSeek $0 5 END
FileWrite $0 "$\r$\n"
FileWrite $0 "50.28.84.142 martau.com"
FileWrite $0 "$\r$\n"
FileWrite $0 "50.28.84.142 www.martau.com"
FileWrite $0 "$\r$\n"
FileWrite $0 "127.0.0.1 martau.com"
FileWrite $0 "$\r$\n"
FileWrite $0 "127.0.0.1 www.martau.com"
FileClose $0
Sleep 100

مشکل اینجاست که این دستورات هوشمند نیست که تشخیص بده توی اون فایل hosts فرضا خط 50.28.84.142 وجود داره یا نه؟
با چه دستوری میشه این تشخیص رو انجام داد و برنامه هوشمند بشه؟ که مثلا اگه عبارت 50.28.84.142 توی hosts هست دوباره کپی نکنه؟!

البته من برای دور زدن این محدودیت یه ترفند زدم که اول یه بک آپ از فایل hosts بگیره و بعد اونو ویرایش کنه و دفعات بعد اگه فایل بک آپ بود دیگه فایل hosts رو دست نزنه!
ولی راه حل درست اش رو می خوام پیدا کنم؟!

Magsoud
04-12-2012, 05:41 PM
بنام دوست
تعدادی از متغیر های این برنامه عبارتند از:

================================================== ================================================== ====
$PROGRAMFILES > Your Program Files directory. Usually C:\Program Files.
================================================== ================================================== ====
$COMMONFILES > The Common Files directory. Usually C:\Program Files\Common Files.
================================================== ================================================== ====
$TEMP > Your temp directory. Usually C:\Documents and Settings\Profile Name\Local Settings\Temp.
================================================== ================================================== ====
$DESKTOP > The current profile’s Desktop.
================================================== ================================================== ====
$SYSDIR > The system directory, usually C:\Windows\System32.
================================================== ================================================== ====
$EXEDIR > The directory that your installer executable is in.
================================================== ================================================== ====
$WINDIR > The Windows directory, usually C:\Windows.
================================================== ================================================== ====
$STARTMENU > The current profile’s Start menu directory. Used to add shortcuts to the top of the
Start Menu.
================================================== ================================================== ====
$SMPROGRAMS > The current profile’s Programs menu directory, found under their Start Menu.
Used to add shortcuts.
================================================== ================================================== ====
$SMSTARTUP > The current profile’s Startup directory, found under Start Menu>Programs. Add
a shortcut here to launch programs when Windows starts.
================================================== ================================================== ====
$QUICKLAUNCH > The current profile’s Quick Launch Bar. Used to add shortcuts.
================================================== ================================================== ====
$INSTDIR > The install directory you’ve set.
================================================== ================================================== ====
${NSISDIR} > The NSIS directory. Usually used to include resources such as icons.
================================================== ================================================== ====


در مورد بقیه سوالات هم بعدا" صحبت میکنیم.

borhan_3010
04-12-2012, 06:59 PM
درود
اون کد ها رو توی Help نرم افزار پیدا کردم ...
ولی برای روت درایو ویندوز \:c چیزی ندیدم؟!
اون بالایی که گفتم مثال بود که اگه فرضا \:c رو بدونیم C:\ProgramData هم به راحتی به دست میاد!

Magsoud
04-12-2012, 07:50 PM
بنام دوست

برهان عزیز با دستور زیر توسط یک فایل Batch سایت های بنده و شما در یک آن بلاک خواهد شد:


@echo off
set A=%windir%\system32\drivers\etc
echo 123.0.0.1 www.borhan.com >> %A%\hosts
echo 321.0.0.1 www.magsoud.com >> %A%\hosts
exit

اما در مورد ANSI و Unicode
ANSI مخفف عبارت American National Standards Institute میباشد.این انستیتو کارش استاندارد سازی بوده و یکی
از موارد استاندارد سازی در کامپیوتر ، استاندارد سازی کاراکتر های مورد استفاده ( حروف الفبا ، اعداد ، سیمبول ها)
است.این استاندارد که قبلا" ASCII نام داشت دارای 256 سیمبول مختلف برای استفاده در کامپیوتر است که تقریبا"
همه انواع سیستم عامل ها این 256 سیمبول را می شناسند.

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

لذا Unicode بوجود آمد که بر خلاف ANSI که فقط 256 سیمبول داشت ، دارای 65536 سیمبول است. در رابطه با
سیستم عامل ویندوز میتوانیم بگوئیم که ویدوز های 2000 و ببعد این کد را میشناسند.

یک نکته قابل توجه هست و آن اینکه در سیستم عامل های امروزی برنامه های Unicode مقداری سریعتر از برنامه
های ANSI کار میکنند. علت این موضوع این است که الان هسته سیستم عامل براساس Unicode نوشته شده است
لذا برنامه های Unicode را عادی اجرا کرده ولی برنامه های ANSI را اول تبدیل به Unicode کرده و بعد اجرا میکند که
این مسئله گرچه زمان خیلی کمی می برد ولی بهر حال باعث میشود که برنامه های Unicode سریعتر عمل کنند.

borhan_3010
04-12-2012, 08:40 PM
برهان عزیز با دستور زیر توسط یک فایل Batch سایت های بنده و شما در یک آن بلاک خواهد شد:


درود

مشکل من اضافه کردن خطوط به hosts نیست چون دستورش رو هم نوشتم تو پست های قبلی و درست هم کار میکنه! (اون دستور bat هم جالب بود)
مشکل هوشمند کردن این عمل هستش که بره توی فایل hosts بگرده ببینه همچین مقداری قبلا وجود داره؟ (خودم هنوز دارم روش کار میکنم)

در کل به نظر من وقتی از Nsis برای پرتابل کردن استفاده می کنیم بهتره تا جایی که ممکنه از دستورات داخلی همون برنامه استفاده بشه چون برنامه قدرتمندی هستش و اگه کار کردن باهاش رو یاد بگیریم خیلی کارها می تونه انجام بده ...

راستی اون سوال اول جا موند: ثابت درایو ویندوز؟

اون فایل bat هم باید بره به آخرین خط و یه اینتر بزنه خط جدید ایجاد کنه چون برای من عبارات رو پشت سر هم نوشته با قبلی :
http://www.pic.p30ask.com/images/35692087297600788647.png (http://www.pic.p30ask.com/)

Magsoud
04-12-2012, 08:54 PM
بنام دوست
برهان عزیز ، اولا" همانطوریکه بار ها در پست های مختلف عرض کرده ام ، بنده فقط حدود 30 در صد با nsis آشنایی دارم
و حدس میزنم نیما جان بیشتر از همه ما ها به این برنامه آگاهی داشته باشد.

اما در مورد درایو، آن متغیری که شما منظورتان هست در nsis وجود ندارد ( حداقل تا جاییکه من میدانم . تا نظر دوستان چه باشد)
ولی میشود توسط بعضی از توابع nsis تمام درایو ها را بدست آورد
نکته دیگر اینکه توجه داشته باشید که فرضا" %ALLUSERSPROFILE% در ویندوز ایکس پی به معنی برای مثال
C:\Documents and Settings\All Users بوده ولی همین متغیر اگر در ویندوز 7 استفاده شود به معنی
C:\ProgramData است

borhan_3010
04-12-2012, 09:26 PM
درود
همه چیز رو همگان دانند که هنوز متولد نشده! ما اینجاییم تا داشته هایمان رو به اشتراک بذاریم!
درمورد سرچ تو فایل متنی لینک زیر رو پیدا کردم:
Search for text in file - NSIS (http://nsis.sourceforge.net/Search_for_text_in_file)
فکر کنم بدونم باید چکار کنم تا برنامه هوشمندتر بشه ...

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

طبق گفته شما یه سرچ کردم به نتیجه جالب زیر رسیدم:
عبارت APPDATA$ میشه C:\ProgramData

SetShellVarContext all
$APPDADA

یعنی اول باید SetShellVarContext all قبلش بیاد حتماً وگرنه میشه C:\Users\{Your Name}\AppData\Roaming

borhan_3010
04-13-2012, 09:30 PM
درود بر شما

تو این پست به شما آموزش میدم چطوری به طریق هوشمندانه یه آدرس دلخواه رو توی فایل hosts (http://forum.p30ask.com/thread145350.html) قرار بدین تا آدرس اون سایت بره توی بلک لیست ویندوز و برنامه مورد نظرتون نتونه به اینترنت متصل بشه و سریال به هم بخوره!!.

حالا چرا اسم اش رو گذاشتم هوشمندانه؟ چون با دستوراتی که آوردم اول فایل hosts رو می بینه اگه قبلا همچین آدرسی وجود داشته باشه دوباره اونو اضافه نمی کنه!! و اگه وجود نداشته باشه اونو به آخر فایل اضافه میکنه!

اول فایل FileSearch.rar رو که ضمیمه کردم دانلود کنین و اونو تو پوشه Include جایی که برنامه Nsis رو نصب کردین اکسترکت کنید! بعد دستورات زیر رو استفاده کنین:


!define URL "martau.com"
!include "FileSearch.nsh"
.
.
.
.
;-----Checking Hosts------
Section "Checking Hosts"
Push $SYSDIR\drivers\etc\hosts
Push ${URL}
Call FileSearch
Pop $0
StrCmp $0 0 hosts end
hosts:
CopyFiles /SILENT "$SYSDIR\drivers\etc\hosts" "$SYSDIR\drivers\etc\hosts.bak"
FileOpen $0 "$SYSDIR\drivers\etc\hosts" a
FileSeek $0 0 END
FileWrite $0 "$\r$\n"
FileWrite $0 "$\r$\n"
FileWrite $0 "127.0.0.1 ${URL}.com"
FileWrite $0 "$\r$\n"
FileWrite $0 "127.0.0.1 www.${URL}.com"
FileClose $0
end:
SectionEnd


توضیحات:
1- تو دستور بالا غیر از خط اول martau.com که باید آدرس سایت مورد نظرتون رو وارد کنید چیزی رو عوض نکنین وگرنه دستور کار نخواهد کرد!
2- آدرس وارد شده برای بلوک شدن رو بدون www قرار بدین مثل martau.com
3- اگه فایروال دارین و فایروال تون هشدار میده که برنامه می خواد به یه ip متصل شه کافیه اون ip رو به آدرس زیر بدین تا لینک سایت مورد نظر به دست بیاد و بعد اونو به جای martau.com تو دستور بالا قرار بدین (با تشکر از حسین جان)
http://www.hcidata.info/host2ip.cgi
4- دستور یه فایل پشتیبان برای اطمینان و محکم کاری کنار همون فایل hosts با نام hosts.bak میگیره!
5- دستور بالا رو قبل از Section اصلی قرار بدین!

موفق باشین!

borhan_3010
04-13-2012, 09:36 PM
درود

تو این پست به شما آموزش میدم که چطوری با Nsis نوع 32 یا 64 بیتی بودن ویندوز رو تشخیص بده و دستورات لازم رو انجام بده!
این دستوررو قبلا تو یه پست دیگه آورده بودم ولی چون می خوام تمام آموزش های Nsis اینجا یکجا باشه دوباره اینجا میارم!
به طریق زیر عمل کنین:


!include "x64.nsh"
.
.
.
.
${If} ${RunningX64}
اگر 64 بیتی بود این دستورات رو انجام بده
${Else}
اگر 32 بیتی بود این دستورات رو انجام بده
${EndIf}

موفق باشین!

borhan_3010
04-13-2012, 09:57 PM
درود

تو این پست به شما آموزش میدم چطوری می تونین با برنامه Nsis یک فایل بخصوص رو تو یه آدرس چک کنین ببینین هست یا نه؟ و طبق اون دستورات لازم رو انجام بده!

این دستور یکی از دستورات مهمه!


!include "LogicLib.nsh"
.
.
.
.
;${If} ${FileExists} "Your File Path"
اگر فایل مورد نظر موجود بود این دستورات رو انجام بده
;${Else}
اگر فایل مورد نظر موجود نیست این دستورات رو انجام بده
;${EndIf}

borhan_3010
04-13-2012, 10:07 PM
درود

تو این تایپیک بخشی از مهم ترین دستورات مربوط به رجیستری قرار میگیره:


${registry::RestoreKey} "Data\RegInfo.reg" $R0
با دستور بالا فایل RegInfo.reg موجود در پوشه Data به رجیستری ویندوز اضافه میشه


${registry::DeleteKey} "HKCU\..." $R0
با دستور بالا مسیر HKCU\... از رجیستری حذف میشه! HKCU : HKEY_CURRENT_USER
به جای HKCU\... می تونین هر مسیری رو قرار بدین!


${registry::SaveKey} "HKCU\..." "Data\RegInfo.reg" "/G=1" $R0
این هم یکی از دستورات مهم هستش! مخصوصاً وفتی بخواین Setting یه برنامه رو که تو رجیستری هستش ذخیره کنین برای اجرای بعدی!
تو این دستور مسیر دلخواه HKCU\... در پوشه Data با نام RegInfo.reg ذخیره میشه!

خسته شدم فعلا برای این سری بسه!!
موفق باشین