nsis ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ...

42
آﻣﻮزش اﺳﻜﺮﻳﭙﺖ ﻧﻮﻳﺴﻲNSIS ﺑﺮﻧﺎﻣﻪ ﺑﺮاي ﺗﺎزه ﻧﻮﻳﺴﺎن ﭘﻴﺸﺮﻓﺘﻪ و ﻛﺎرNullsoft Scriptable Install System ﺗﺄﻟﻴﻒ اﻳﺮاﻧﻲ اﻣﻴﺮﻣﺴﻌﻮدAMIB [email protected] ﺧﺮداد، ﺗﻴﺮ ﻣﺮداد و، 86 ﻧﺨﺴﺖ وﻳﺮاﻳﺶ: 2 ﺷﻬﺮﻳﻮر86 ﻣﻨﺒﻊ: ﺑﺮﻧﺎﻣﻪ راﻫﻨﻤﺎي اﻳﺠ ﺑﺪون ﻓﻘﻂ آﻣﻮزش اﻳﻦ اﻧﺘﺸﺎر اﺳﺖ ﻣﺠﺎز ﺿﻤﺎﻳﻢ و اﺻﻠﻲ ﻓﺎﻳﻞ در ﺗﻐﻴﻴﺮات ﺎد ﻛﭙﻲ ﻓﺎﻳﻞ، اﻳﻦ ﻣﺤﺘﻮاي در ﺗﻐﻴﻴﺮات اﻳﺠﺎد ﻣﻲ ﻣﻤﻨﻮع ﺷﻜﻞ ﻫﺮ ﺑﻪ ﻣﻨﺒﻊ ذﻛﺮ ﺑﺪون ﻣﻄﺎﻟﺐ از اﺳﺘﻔﺎده ﺑﺮداري، ﺑﺎﺷﺪhttp://egza.wordpress.com/

Upload: others

Post on 19-Mar-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

NSIS نويسي اسكريپتآموزش كار و پيشرفته نويسان تازه براي برنامه

Nullsoft Scriptable Install System

تأليف

اميرمسعود ايرانيAMIB

[email protected]

86، و مردادتير ،خرداد 86 شهريور 2: ويرايش نخست

راهنماي برنامه: منبع

اد تغييرات در فايل اصلي و ضمايم مجاز استانتشار اين آموزش فقط بدون ايج باشد برداري، استفاده از مطالب بدون ذكر منبع به هر شكل ممنوع مي ايجاد تغييرات در محتواي اين فايل، كپي

http://egza.wordpress.com/

Page 2: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

1ي صفحه.........................................................................................................................................NSISآموزش

3......................................................................................................................................................................مقدمه

3............................................................................................................................................................... معرفّي- 1 4............................................................................................................................................... نصب برنامه- 1- 1 4....................................................................................................................................... انتخاب ويرايشگر- 2- 1 5.......................................................................................................................................... ابزارهاي كمكي- 3- 1 5.................................................................................................................................. خوش آمديدNSIS به - 4- 1

NSIS....................................................................................................................................6 آشنايي با اسكريپت - 2 6......................................................................................................................................................ها رشته- 1- 2 7...................................................................................................................................................... متغيرها- 2- 2

7...................................................................................................................................... مقادير ثابت-1- 2- 2 8......................................................................................................................................................... توابع- 3- 2 9..................................................................................................................................................... ماكروها- 4- 2 Stack(............................................................................................................................................9( پشته - 5- 2 10...................................................................................................................................................اتصفح- 6- 2 11....................................................................................................................................................ها بخش- 7- 2

12........................................................................................................................... انواع مختلف نصب-1- 7- 2 13........................................................................................................................ سراسريي دستورات پهنه- 8- 2

2 -8 -1-OutFile...........................................................................................................................................13 2 -8 -2-Name.............................................................................................................................................13 2 -8 -3-Caption..........................................................................................................................................13 2 -8 -4-SetCompressor..............................................................................................................................13 2 -8 -5-Icon و UninstallIcon........................................................................................................................14 2 -8 -6-InstallDir........................................................................................................................................14 2 -8 -7-InstallDirRegKey............................................................................................................................14 2 -8 -8-LicenseData...................................................................................................................................15 2 -8 -9-CRCCheck......................................................................................................................................15 2 -8 -10-ChangeUI.....................................................................................................................................15 2 -8 -11-BrandingText...............................................................................................................................16 2 -8 -12-AutoCloseWindow........................................................................................................................16 2 -8 -13-SilentInstall..................................................................................................................................17 2 -8 -14-SetFont........................................................................................................................................17 2 -8 -15-ShowInstDetails...........................................................................................................................17 2 -8 -16-XPStyle........................................................................................................................................18 18..................................................................................................................ها تا كنون مرور آموخته- 17- 8- 2 19.............................................................................................................دستورات كاربردي كامپايلر- 18- 8- 2

21...............................................................................................................ها ي توابع و بخش دستورات پهنه- 9- 22 -9 -1-SetOutPath....................................................................................................................................21 2 -9 -2-File.................................................................................................................................................21 2 -9 -3-CopyFiles........................................................................................................................................22

http://egza.wordpress.com/

Page 3: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

2ي صفحه.........................................................................................................................................NSISآموزش

2 -9 -4-MessageBox...................................................................................................................................23 2 -9 -5-CreateShortCut..............................................................................................................................24 2 -9 -6-Sleep..............................................................................................................................................24 2 -9 -7-CreateDirectory..............................................................................................................................24 2 -9 -8-RMDir.............................................................................................................................................25 2 -9 -9-Rename.........................................................................................................................................25 2 -9 -10-Delete..........................................................................................................................................25 2 -9 -11-Quit..............................................................................................................................................26 26.......................................................................................................................دستورات رجيستري- 12- 9- 2 ini..........................................................................................................................28دستورات فايل - 13- 9- 2 29..........................................................................................................دستورات اجراي فايل خارجي- 14- 9- 2 29....................................................................................دستورات خواندن، نوشتن، و جستجوي فايل- 15- 9- 2

Uninstall(....................................................................................................................................32(حذف -10- 2 CallBack......................................................................................................................35فهرست توابع : پيوست الف

35................................................................................................................ در زمان نصبCallBack توابع - 1-الف UnInstall..........................................................................................................37 در زمان CallBack توابع - 2-الف

38..........................................................................................................................................بهينه سازي: پيوست ب 38........................................................................................................................كاهش بيش از پيش حجم- 1-ب 39...................................................................................................................افزايش سرعت فشرده سازي- 2-ب 40.........................................................................................................................افزايش سرعت استخراج- 3-ب

http://egza.wordpress.com/

Page 4: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

3ي صفحه.........................................................................................................................................NSISآموزش

مقدمههاي هاي خارجي، نياز به ايجاد آيكون برنامه در محل ها از كتابخانه ي برنامه در محيط ويندوز به دلايل مختلفي از جمله استفاده

اي در ميـان هـاي نـصب جايگـاه ويـژه برنامـه ... ده بـراي مـشتريان خـانگي و تر كـردن اسـتفا قابل دسترس براي كاربر، ساده افـزار تـأثير زيـادي تواند در ديدگاه كاربر نسبت به نـرم ي انجام اين كار مي افزار و شيوه زيرا انتشار نرم . نويسان پيدا كردند برنامه

.داشته باشد InstallShieldهـا شـايد مـشهورترين آن . انـد م اين كار توسعه يافتـه افزارهاي متعدد و گوناگوني براي انجا در حال حاضر نرم

با وجـود . بخشند مي دهد، فرآيند انتشار را بسيار سرعت قرار مي دهندگان توسعهافزار در اختيار شك امكاناتي كه اين نرم بي. باشد ـ InstallShield مزايا، معايب اصلي ي همه ي آن را روز بـه روز افـزار كـه اسـتفاده رم عبارتند از حجم بالاي خروجي و بهاي ن

.دهند كاهش ميNSIS ه به توسعهاب برنامه ،هاي اخير خود با توجي ايـن تأييد كننـده .رود ها پيش مي گام به گام به سوي در انحصار گرفتن نص

افـزار در ي بـالاي ايـن نـرم افـزاري و رتبـه المللـي نـرم ي بـين امر هم آمار بسيار بـالاي دانلـود، دسـتيابي بـه چنـدين جـايزه SourceForge) است) هاي متن باز اينترنت مركز اصلي پروژه.

نويس تازه كار قابـل يـادگيري اي كه براي هر برنامه ترين شكل ممكن و به گونه ي پيش رو تلاش خواهم كرد به ساده در مقاله

. بپردازمNSISها و آموزش استفاده از باشد به شرح قابليت

.مانيد، اين مقاله را دنبال كنيدبپس NSIS كاربران رو به گسترش كاروان از خواهيد نمييز اگر شما ن معرفّي- 1

:پردازيم ميNSISهاي ابتدا به فهرست توانايي كيلوبايت35 حدود -) Stub(حجم كم سرآمد هاي ويندوز نسخهي همهسازگاري با نويس توسط برنامهسازي قدرتمند و قابل انتخاب و تنظيم فشرده گذاري شده بر اساس اسكريپت نويسي پايه هاي راست به چپ مانند فارسي از زباني پشتيبان–ي نصب با چندين زبان امكان ايجاد برنامه هاي متعدد براي سيستم مقصد ها و بررسي قابليت امكان سفارشي كردن رابط كاربر و ايجاد تغييرات دلخواه براي افزودن امكانات دلخواه كابرPlug-inپشتيباني از هاPlug-in فايل با استفاده از Patch شبكه و امكان ايجاد راهامكان نصب از سازد هاي مختلف فراهم مي ي نصب را به گونه ي قوي كه امكان ايجاد برنامه پردازنده پيش ساختار اسكريپت ساده و روان

ولي نگران نباشيد چون علاوه بر سـادگي زبـان . فاقد رابط كاربر براي طراّحي است NSIS كه بايد متوجه شده باشيد گونه همان

NSIS در اين مقاله با بهتـرين . نويسي در دسترس شماست تر كردن فرآيند برنامه ها و ابزارهاي جانبي بسياري براي ساده ، برنامه . آشنا خواهيم شدي لازمويرايشگرها و ابزارها

http://egza.wordpress.com/

Page 5: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

4ي صفحه.........................................................................................................................................NSISآموزش

نصب برنامه -1-1حجم فايل نصب فعلـي . و سريع باشد ساده، كم حجم NSISجه به آنچه كه تا كنون گفته شد انتظار بر اين است كه نصب با تو و انتخاب مسير Nextگيرد و در زمان نصب نيز با چند بار فشردن مگابايت است يعني بر روي يك ديسكت جاي مي 1,44فقط

.رسد نصب با سرعت بالا به پايان مي مقصد، انتخاب ويرايشگر-1-2

ي در حال حاضر قويترين محيط بـراي توسـعه . اند بسياري اقدام به نوشتن ويرايشگر براي آن نموده NSISهاي به دليل توانايي .eclipsensis است البته با استفاده از پلاگين NSIS ، Eclipseهاي برنامه

هـاي آن، در ايـن مقالـه از حجم بالا و عدم نياز ما بـه توانـايي هاي آن و همچنين و پلاگين Eclipseبه دليل پيچيدگي نصب .تر و در عين حال با امكانات كافي استفاده خواهيم كرد افزارهاي ساده نرم

همگـي اين برنامه مدتي است كه به روزرساني نشده ولي با اين حـال . استHM NIS Editويرايشگر منتخب ما در اين مقاله .كند نويسي و طراحي صفحات سفارشي را پشتيباني مي از جمله اسكريپتNSISنويس ك برنامهامكانات مورد نياز ي

. مراجعه كنيددريافت سر بزنيد و به بخش http://hmne.sourceforge.net به سايت NIS Editبراي دانلود

ـ به بخش تنظيمات مراجعه كنيد و دكمهF11پس از نصب برنامه با كمك كليد و nsiهـاي ه وابـسته كـردن فايـل ي مربوط بnsh به اين برنامه را فشار دهيد تا بتوان از محيط Explorer هاي اسكريپت ويندوزNSISرا با اين برنامه باز كرد .

http://egza.wordpress.com/

Page 6: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

5ي صفحه.........................................................................................................................................NSISآموزش

ابزارهاي كمكي-1-3 اسـتفاده هـا موجود هستند كه در طـول مقالـه و در صـورت نيـاز از آن NSISهاي ي اسكريپت ابزارهاي گوناگوني براي توسعه

خواهيم كرد خوش آمديدNSIS به -1-4

. آشنا شويدNSISپيش از شروع بهتر است با ساختار كلّي گويـد كـه فايـل مـي NSISمحتويات اين فايل به كامپايلر . ايجاد كنيد nsiبراي ايجاد يك فايل نصب بايد يك فايل با پسوند ...هايي را در كجا نصب كند و اشد، چه فايلخروجي را با چه نامي ذخيره كند، چه آيكوني داشته ب

اين كار با كليك راسـت روي آيكـون فايـل و . را فراخواني كنيد NSIS به فايل اجرايي بايد كامپايلر nsiبراي تبديل يك فايل ايـن . د به نمايش در خواهد آم ـNSISي گرافيكي با انجام اين كار پنجره. امكان پذير استCompile NSIS Scriptانتخاب

يـك برنامـه در محـيط كنـسول NSIS زيرا كامپايلر .كند ايفا ميرا NSISپنجره در حقيقت نقش يك رابط بين شما و كامپايلر .است و رابط كاربر ندارد

. را مشاهده كنيدNSISي رابط توانيد پنجره در تصوير زير ميدر انتهـاي اطّلاعـات . دنشـو طار، و آمار باشد نمـايش داده مـي تواند شامل هشدار، اخ در زمان كامپايل اطلاّعات مختلفي كه مي

.ي نصب با يكديگر مقايسه شده است هاي ورودي و حجم برنامه حجم فايل انـواع توانيد بـه كامپـايلر بگوييـد تـا كه مي ستي ديگر نيز در اختيار شما يك گزينه Explorerي ذكر شده در علاوه بر گزينه

استفاده از اين گزينه در اوايل كـار بـا . ترين خروجي را براي شما باقي بگذارد حجم كند و كم آزمايش هاي ممكن را سازي فشردهNSISسازي بينجامد ها و سرعت هر فرمت فشرده تواند به آشنا شدن شما با توانايي مي.

ي نصب در صورت نرفتن حجم برنامه كه تا كنون به آن اشاره نكرده بوديم بالا NSISهاي منحصر به فرد يكي ديگر از قابليت ي نصب توانايي اجراي دستورات حذف برنامه را نيز داراست و تنها با يك به اين دليل كه برنامه . است UnInstallerاستفاده از

. شما آماده استUnInstallerبرداري، تغيير آيكون، و اضافه كردن دستورات لازم، كپي

. خواهيم نوشتگام اسكريپت خود را در همين نخستين ،NSISادگيري يبه اشتياق شما افزايشبراي NIS Editيا يك ويرايشگر متن را باز كنيد . . را داخل ويرايشگر بنويسيدذيلكد

http://egza.wordpress.com/

Page 7: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

6ي صفحه.........................................................................................................................................NSISآموزش

OutFile Hello.exe Name "My First NSIS Script" Section SectionEnd

. ذخيره كنيدHello.nsiفايل را با نام اسكريپت خود را كامپايـل و اجـرا كنيـد و در غيـر ايـن Shift+F9كنيد با فشرده كليدهاي تفاده مي اسNIS Editاگر از

Compile NSIS Script فايل مورد نظر را بيابيـد و بـا كليـك راسـت بـر روي آن و انتخـاب Explorer راهصورت از .را به وجود آوريدخروجي

.توانيد حاصل را مشاهده كنيد در شكل ذيل مي

NSIS آشنايي با اسكريپت -2

NSISهـاي در ادامـه بـه قـوانين كلّـي در نوشـتن برنامـه . كنـد نويسي از قواعد مخصوص به خود پيـروي مـي هر زبان برنامه .پردازيم مي. ولي امكان اينكه يك دستور در چند خط ادامه پيدا كنـد وجـود دارد پذيرد را مي هر خط از اسكريپت تنها يك دستور NSISدر

:استفاده نماييد» \«ي مميز وارو از نويسه،تر را داريد ي آنها در پايين براي انجام اين كار بايد در انتهاي خطوطي كه قصد ادامهMessageBox MB_OK|MB_ICONINFORMATION \ " ي دستور در خط بعدي ادامه "

تر كند و باعث خوانايي بيـشتر اسـكريپت زدايي را ساده تواند اشكال استفاده از توضيحات در ميان دستورات و در پايان خطوط مي

ي نقطـه كند و براي اضافه كردن توضيحات بايد در ابتداي آن از نويسه از توضيحات چند خطّي پشتيباني نمي NSIS. شما گردد .استفاده كنيد» #«يا علامت شماره » ;«ويرگول

File /r "myDir\*.*" ; موجود در شاخههاي ها و فايل شاخهي همهآپي

توانيـد يـك خـط به اين معنـي كـه مـي . عملكرد آن در انتهاي خطوط توضيح است » \«مميز وارو ي خصوصيت جالب نويسه

.توضيح را نيز به خط بعدي ادامه دهيد ها رشته-2-1

وجود هـر يـك چنانچه. ستدر اختيار شما » '«و آپستروف » "«ي نقل قول ي نويسه هاي حرفي دو گزينه براي قرار دادن رشته ي تركيبـي استفاده از نويسه ديگر،و راه حلّ . كنيدتوانيد از ديگري براي اين كار استفاده از اين دو نويسه در رشته نياز است، مي

ي نقل قول و آپستروف را بـدون تـداخل بـا دسـتورات اسـكريپت در در ميان رشته است كه به ترتيب نويسه » '\$«يا » "\$« .دهند رار ميرشته ق

http://egza.wordpress.com/

Page 8: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

7ي صفحه.........................................................................................................................................NSISآموزش

Name "AMIB's Installer" ; AMIB's Installer Section 'Sample Section "Named AMIB"' ; Sample Section "Named AMIB" MessageBox MB_ICONSTOP "Error # $\"1234$\"" ; Error #"1234"

كه به ترتيـب بـراي » t\$«و » n\$«ار بگيرند مانند هاي حرفي قر توانند در ميان رشته هاي تركيبي مي موارد ديگري از نويسه

.هستند) Tab(بندي ي جدول رفتن به خط بعدي و نويسه آشنايي داشته باشيد شايد از خود بپرسيد كه علامت دلار به چه دليل در موارد بالا گنجانده شـده؟ پاسـخ PHP يا Cاگر با زبان

ر در هاي تركيبي بـه عنـوان اين پرسش تعريف شدن نويسه ر ديگـري بـراي مثـال . اسـت NSISمتغيـ يعنـي ماننـد هـر متغيـ»$PROGRAMFILES «كند ها در سيستم مقصد را تعيين مي فرض نصب برنامه كه مسير پيش.

ي شما رشته چنانچه بنابراين .باشد) Space(ي فاصله استفاده از گيومه و آپستروف هنگامي اجباري است كه رشته حاوي نويسه .پوشي كنيد ي رشته چشم هاي تعريف كننده توانيد از نويسه ي فاصله است، مي فاقد نويسه

متغيرها-2-2

ر .نويسي متغير است يكي از مهمترين نيازهاي هر زبان برنامه اسـتفاده Var از دسـتور ، براي تعريف يك اسـم بـه عنـوان متغيـ .كنيم مي

Var myNumber Var myString

بنـابراين . گيرند الزامي اسـت ي يك بخش يا تابع قرار مي پهنهبراي تعريف متغيرهايي كه در » GLOBAL/«استفاده از پارامتر

.تعريف سراسري خواهند بود و از هر محلّي قابل دسترسي متغيرها فارغ از محلّي همهFunction Dummy Var /GLOBAL myNumber FunctionEnd

اي را در داده گونهتوانند هر پذيرند و مي نمي گونه متغيرها در زمان تعريف PHPمانند NSISكنيد در كه مشاهده مي گونه همان .خود ذخيره كنند

اين قانون اسـتفاده از متغيرهـا . پيش از نام متغير استفاده نماييد » $«ي دلار بايست از نويسه براي استفاده از محتواي متغير مي .شود ميهاي حرفي را نيز شامل در ميان رشته

StrCpy $myString " ي حرفي رشته ي حرفي رشته ; " StrCpy $myString2 "myString = $myString" ; myString = ي حرفي رشته

ايـن . توانند بنابر نياز مورد استفاده قـرار گيرنـد اند كه مي علاوه بر متغيرهاي كاربر، تعدادي متغير ديگر نيز در كامپايلر تعبيه شده

:ها عبارتند ازمتغير$0, $1, $2, $3, $4, $5, $6, $7, $8, $9, $R0, $R1, $R2, $R3, $R4, $R5, $R6, $R7, $R8, $R9

و » WINDIR$«شــوند ماننــد ي نــصب مقــداردهي مــي متغيرهــاي ثابــت ديگــري نيــز وجــود دارنــد كــه بــا اجــراي برنامــه

»$DESKTOPDIR « ي بـراي مـشاهده . ي مناسـب باشـند جهت انتخاب شـاخه توانند كمكي در كه در طول اجراي برنامه مي . مراجعه كنيدNSISليست كامل متغيرهاي ثابت به راهنماي

مقادير ثابت -2-2-1

اسـتفاده define!بـراي تعريـف ايـن مقـادير از دسـتور . امكان تعريف مقادير ثابت نيز وجود دارد ،علاوه بر متغيرها NSISدر :شود مي

http://egza.wordpress.com/

Page 9: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

8ي صفحه.........................................................................................................................................NSISآموزش

!define appVersion "1.54" Caption "AMIB App ${appVersion}" ;AMIB App 1.54 ي نصب به تغيير عنوان پنجره

.استفاده كنيم» {ConstName}$«هاي تعريف شده بايد از فرمت كنيد براي استفاده از مقدار ثابت كه مشاهده ميگونه همان :ها عبارتند از ي ثابت موارد استفاده

براي جلوگيري از تكرار و ... ي برنامه و مانند نام برنامه، نسخه . شوند استفاده مي هاي مختلف تعريف مقاديري كه در محل . حاصل از تكرارخطاهاي احتماليِ

.هاي نصب پويا هاي رياضي در ثابت مورد نظر براي ايجاد برنامه قرار دادن مقادير تاريخ، ساعت، و فرمول .هاي مختلف فقط با تعريف يا عدم تعريف ثابت مورد نظر جيتوليد خرو. هاي نصب هوشمند ايجاد برنامه

.ها وجود دارند ثابت دستورات ديگري نيز براي مديريتdefineِ!علاوه بر دستور

ثـابتي تعريـف چنانچهتوجه كنيد . شود شده از ليست سراسري تعاريف استفاده مي تعريف براي حذف ثابتِ undef!دستور ، و نام ثابـت درسـت بـه همـان شود نميبرگردانده «» اده از مقدار آن را داشته باشيد، مقدار خالي نشده باشد و قصد استف

{TestSym}$ي شـما از باشـد، اسـتفاده نشده تعريف TestSym چنانچهبراي مثال . شكل در خروجي ظاهر خواهد شد .را باعث خواهد شد» {TestSym}$«خروجي

ايـن دسـتور تعريـف نام مقابل كه اگر گونهبه اين . رود بخشي از اسكريپت به كار مي براي كامپايل شرطي ifdef!دستور . كامپايل خواهند شدendif! فرامين دنباله تا رسيدن به يك دستور ،شده باشد

فـرامين دنبالـه ، باشـد نـشده مورد نظـر تعريـف نام چنانچه دارد و ifdef! عملكردي برعكس ifndef!استفاده از دستور .شوند مي ايلكامپ

.كند عمل مي شرط مورد نظر برقرار نباشد،چنانچهكند و نويسي، عمل مي هاي برنامه نيز همانند ديگر زبانelse!دستور !define DemoOutput "Demo" ;تعريف ثابت مربوط به خروجي نمايشي !ifdef DemoOutput ; تعريف شده بود»خروجي نمايشي« اگر ثابتِ File "Demo\myFile.exe" ;فايل نمايشي را در بسته قرار بده !else ;در غير اين صورت File "Full\myFile.exe" ;فايل آامل را در بسته قرار بده !endif ;اعلام پايان شرط

تعريف برابر كه در گونه اين به. پذير است با استفاده از خط فرمان نيز امكان define!ها علاوه بر استفاده از دستور تعريف ثابت

:كنيم استفاده مي makensis.exe مقابل كامپايلر D/ثابت در داخل اسكريپت، از پارامتر >makensis /D[مقدار ثابت]=نام ثابت

توابع-2-3

جـاي ويرگـول ها براي جداكردن پارامترهاي يك تابع به برخلاف ديگر زبان NSISايد نيز مشاهده كرده كنونگونه كه تا همان . كند استفاده مي« » ي خالي از فاصله» ,«

CreateShortcut "$STARTMENU\Programs\AMIB\Calculator.lnk" \ "$SYSDIR\Calc.exe"

ر بايد از پشته، متغيرهاي از پيش تعريف شده، يا متغيرهاي كـاربر اديبراي برگشت دادن مق . گردانند مقدار بر نمي NSISتوابع در .كنيدتفاده اس

گفتـه گونه كه در مورد مقدار برگـشتي همان. شود مي در ابتدا و سپس نام تابع استفاده Functionي براي تعريف توابع از كلمه . بايد از پشته يا متغيرهاي داخلي استفاده نماييدبرابردر . كنند نميدريافت نيز شد، توابع كاربر پارامتر مستقيم

http://egza.wordpress.com/

Page 10: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

9ي صفحه.........................................................................................................................................NSISآموزش

.كنيم استفاده ميFunctionEndبع از اوبراي اعلام پايان تFunction AMIB_Function #تعريف تابع دستورات لازم # FunctionEnd #اعلام پايان تابع Section AMIB Call AMIB_Function #فراخواني تابع SectionEnd

دوم توابـع ي گونـه آن در بـالا ذكـر شـد، نخست توابع معمولي كـه شـرح ي گونه. شوند به سه گونه تقسيم مي NSISتوابع در

CallBack ط كاربر ايجاد ميتوابع براي گونهاين . آن را فراخواني كنند )و نه خود كاربر (هاي ديگر برنامه شوند تا بخش كه توس .شوند شروع مي».« با نقطه CallBackتوابع . شوند ميكه در اختيار كاربر نيست، ايجاد يمطلّع ساختن كاربر از روند عمليات

مراجعه كنيد» الف «پيوست به CallBackي شرح كامل توابع براي مشاهدهرا » .un« توابـع بايـد پيـشوند گونـه ايـن . UnInstallerي برنامهشوند به هايي هستند كه مربوط مي سوم توابع، آن ي گونهو

.پذير نيست امكانUnInstaller راهابع عادي از و فراخواني توInstallerفراخواني اين توابع از داخل . داشته باشند ماكروها-2-4

تفاوت ماكروها با توابـع در شـكل . شوند نويسي مي نويسي هستند كه باعث حذف تكرار در زمان برنامه از امكانات برنامه ماكروهاكروها در هر بار فراخـواني توسـط شوند در حالي كه ما توابع فقط يك بار در يك بخش از اسكريپت نوشته مي . هاست اجراي آن

مزيتي كه ماكروهـا نـسبت . توان ماكروها را توابع درون خطّي نامگذاري كرد مي. شوند پردازنده به محل مورد نظر كپي مي پيش .يردپذ ها صورت نمي ي كار توابع در آن به توابع دارند افزايش سرعت اجراي برنامه است زيرا اعمال لازم براي شروع و خاتمه

بـراي اسـتفاده از پارامترهـاي . تواننـد تعـدادي پـارامتر بگيرنـد ماكروها مي. استفاده كنيد macro!براي تعريف ماكروها بايد از

:محصور كنيد» {}« در ابتداي نام پارامتر استفاده كنيد و نام پارامتر را در يك مجموعه $ارسالي به ماكروها بايد از !macro SomeMacro parm1 parm2 parm3 DetailPrint "${parm1}" MessageBox MB_OK "${parm2}" File "${parm3}" !macroend

:شود استفاده ميinsermacro!براي استفاده از ماكروها از دستور

!macro Print text DetailPrint "${text}" !macroend !insertmacro Print " ١متن " !insertmacro Print " ٢ متن "

)Stack( پشته -2-5

ندارد و هر مقـداري را بـدون توجـه بـه گونهدرست همانند متغيرها پشته نيز . ي مقادير پشتي محلّي است نامحدود براي ذخيره براي اينكـه . حرف است چه در متغيرها و چه در پشته1024ها البته طول مجاز براي رشته . توان در پشته قرار داد آن مي ي گونه

بـاز بـودن هاي سفارشي كه در سايت برنامه موجود است استفاده كنيد يا با توجه به متن ين مقدار را افزايش دهيد بايد از نسخه ا .برنامه، با ايجاد تغييرات در سورس و كامپايل مجدد، به هدف خود برسيد

http://egza.wordpress.com/

Page 11: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

10ي صفحه........................................................................................................................................NSISآموزش

اي است كه مقادير از بالا در داخل آن گذاشـته هپشته مانند استوان . تفاوت پشته با متغيرهاي معمولي روش دسترسي به آن است

ي همـه بنابراين براي برداشتن آخـرين مقـدار، بايـد . شوند و در هر زمان فقط آخرين مقدار گذاشته شده قابل برداشتن است مي .مقادير از پشته برداشته شوند تا نوبت به مقدار نهايي برسد

بـه . سـازند مقـادير موجـود در پـشته را فـراهم مـي ي همهن دسترسي مستقيم به دستوراتي وجود دارند كه امكا NSISالبته در

بـراي Exch بـراي برداشـتن مقـدار و Pop بـراي قـرار دادن مقـدار، Push كلّي دسترسي بـه پـشته بـا سـه دسـتور ي گونه . هستندتر بر روي مقادير پشته در اختيار شما هاي پيشرفته پردازش

.دهد است كه بر اساس پارامترهاي ارسالي عملكردهاي مختلفي از خود بروز مي به اين صورت Exchعملكرد

.كند هيچ پارامتري به اين تابع ارسال نشود، دو مقدار آخر پشته را با هم تعويض ميچنانچه پـشته عـوض چنانچه يك متغير به عنوان پارامتر اين تابع قرار بگيرد، مقدار موجود در متغير بـا آخـرين مقـدار موجـود در

.خواهد شد امـين مقـدار موجـود در پـشته nبه اين تابع ارسال شوند، مقدار متغير با مقدار موجـود در » n«اگر يك متغير و يك عدد

دهـد باشد يك خطاي جدي رخ ميStackتوجه كنيد كه چنانچه عدد ارسالي بيشتر از مقادير موجود در . شود تعويض مي .ايابي اسكريپت ياري كندنويس را در خط تا برنامه

Push 1 ; در پشته١ قرار دادن عدد Push 2 ; در پشته٢قرار دادن عدد Exch ; ٢ و ١تعويض دو مقدار آخر در پشته يعني Pop $0 ; ١بازخواني آخرين مقدار موجود در پشته يعني

StrCpy $0 1 ; $0 در متغيّر ١قرار دادن مقدار Push 2 ; در پشته٢ن مقدار قرارداد Exch $0 ; تعويض مقادير آخر پشته و متغيّر Pop $1 ; ١خواندن آخرين مقدار موجود در پشته يعني

صفحات-2-6

UninstPageو در هنگـام حـذف از دسـتور Pageبراي انتخاب صفحات نمايش داده شده در هنگام نـصب بايـد از دسـتور ، ترتيـب نمـايش صـفحات را Pageترتيب اسـتفاده از دسـتور . ندنك اي مختلفي قبول مي دستور پارامتره دو اين . استفاده كنيم

.كند تعيين مي : كند عبارتند از ها پشتيباني مي فرض از آن پيشي گونه به NSISصفحاتي كه

license : ز استفاده از نرمافزار و گرفتن تأييد كاربر براي ادامه براي نمايش مجو. components : ط كاربر سفارشي شوند ش صفحهنمايات نصب تا توسي مربوط به جزئي. directory : افزار ي نصب نرم ي مربوط به انتخاب شاخه صفحه. instfiles : شود نصب شروع مي،با به نمايش در آمدن اين صفحه. ي اصلي براي نصب برنامه نمايش صفحه. uninstConfirm : افزار پرسش براي حذف نرم.

http://egza.wordpress.com/

Page 12: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

11ي صفحه........................................................................................................................................NSISآموزش

:شوند عبارتند از ي نصبي مشاهده مي معمول در هر برنامهي گونهصفحاتي كه به ليست Page license Page components Page directory Page instfiles

كنيد ها را مشاهده مي كه تصاوير آن

ها بخش-2-7اي كه برنامه بدون ايـن تر تقسيم شود به گونه هاي كوچك تواند به قسمت افزار شما مي ها هنگامي است كه نرم ي بخش استفادههـا، هاي مختلفي وجود دارنـد ماننـد مثـال بخشNSISي نصب براي مثال در برنامه. ها هم كارايي خود را از دست ندهد بخش .ها با مشكلي براي اجرا مواجه نخواهد بود كه برنامه بدون وجود آن... هاي گرافيكي، و فايل

براي آغاز بخش و Sectionبراي ايجاد بخش از دستور . بخش براي كامپايل شدن اسكريپت الزامي است يك دست كم وجود SectionEnd ي داشته باشند مانند ضخيم بودن عنـوان، ها مي بخش. شود براي پايان بخش استفاده ميتوانند مشخّصات خاص

... :حذف، و عدم امكان

http://egza.wordpress.com/

Page 13: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

12ي صفحه........................................................................................................................................NSISآموزش

.شود نام باشد، و يا نام خالي براي آن تعيين شود نمايش داده نمي شود، بيآغاز » -« نام بخش با خط تيره چنانچه .فرض نصب نخواهد شد پيشي گونه قرار بگيرد، بخش به Sectionدر انتهاي دستور » o/«چنانچه پارامتر . در ابتداي نام بخش باعث نمايش درشت عنوان آن خواهد شد»! «قرار دادن علامت تعجب ايـن مقـدار ). define!(شود نام مورد نظر با يك مقدار عددي تعريف شـود ام در انتهاي دستور باعث مي قرار دادن يك ن

به عنوان مثال بـراي نمـايش اطّلاعـات مربـوط بـه . تواند براي دسترسي به اين بخش مورد استفاده قرار گيرد عددي مي .بخش يا تغيير عنوان بخش

Section "-بخش مخفي" SectionEnd Section # بخش مخفي SectionEnd Section "!عنوان بخش با فونت درشت" SectionEnd Section /o " " بخش انتخابي–فرض عدم نصب پيشSectionEnd Section "بخش معمولي" SEC_IDX # ي بخش تعريف مقدار ثابت با دستگيره SectionEnd

انواع مختلف نصب-2-7-1

نـصب ايجـاد گونـه براي جلوگيري از اين اتّفاق بايد چند . تواند كاربران مبتدي را سردرگم كند د مي هاي زيا انتخاب تعداد بخش ... .، و كمينهبراي مثال، نصب كامل، نصب . كنيم

ترتيب استفاده از اين دستور ليست انواع نـصب را پـر . شود استفاده مي InstType هاي مختلف نصب از دستور براي ايجاد مدل .ردخواهد ك

InstType "نصب آامل" InstType " آمينهنصب " InstType " ها فقط مثال "

هـايي كـه در هـر يـك از ايـن براي تغيير دادن بخش. را به خود اختصاص خواهند داد3 تا 1ي ها ها به ترتيب شماره اين نصب .ها نياز خواهيم داشت شده خواهند بود به اين شماره ها انتخاب نصب

ي حذف مربوط شود و هنگام اجراي نصب به برنامه گونهشود اين نصب باعث مي ي گونهپيش از نام » .un«ند استفاده از پيشو UnInstallerبه نمايش در بيايد .

ي بخـش بايـد از دسـتور پهنـه هـايي انتخـاب شـده باشـند در داخـل نصب چـه بخـش ي گونهبراي اينكه تعيين كنيم در هر

SectionIn ي انواع نصبي كه در آن بايد انتخاب شده باشد را به عنوان پـارامتر بـه ايـن دسـتور ارسـال اره استفاده كنيم و شماستفاده كنيم، از انتخاب يا عدم انتخـاب ايـن بخـش توسـط » Flag (»RO(ي انواع نصب از پرچم پس از شماره چنانچه. كنيم

.كاربر جلوگيري خواهد شدSectionIn 1 2 3 RO

.كارگيري اين دستور را مشاهده كنيد يد يك مثال از روش بهتوان در بخش ذيل مي

http://egza.wordpress.com/

Page 14: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

13ي صفحه........................................................................................................................................NSISآموزش

Section " هاي اجرايي فايل " دستورات لازم # SectionIn 1 2 # آمينهو نصب آامل فرض در انتخاب پيش SectionEnd Section " ها مثال " دستورات لازم # SectionIn 1 # نصب آاملفرض در انتخاب پيش SectionEnd Section "راهنماي برنامه" دستورات لازم # SectionIn 1 3 # ها فقط مثالو نصب آامل فرض در انتخاب پيش SectionEnd

ي سراسري پهنهدستورات -2-8

ها و توابع هستند و بخشي ديگـر مربـوط بـه تنظيمـات ي بخش پهنه مربوط به اجرا در NSISبخشي از دستورات قابل اجرا در .پردازيم ها مي در اين قسمت به شرح تعدادي از آن. ي سراسري تعريف شوند پهنه بايد در اصلي نصب هستند كه

2-8-1-OutFile

مـسيري بـراي چنانچه داشته باشد و exeاين نام بايد پسوند . وجود نام فايل خروجي و يك بخش در هر اسكريپت الزامي است .هد شدآن تعيين نشود، در كنار فايل اسكريپت فعلي ايجاد خوا

OutFile "Setup.exe" 2-8-2-Name

آن را وارد نكنيـد هـشداري بـه شـما نمـايش داده چنانچهوارد كردن اين عبارت اجباري نيست ولي . نصبوارد كردن نام براي .شود ي نصب به كاربر نمايش داده مي هاي مختلف برنامه اين نام در بخش. شود مي

Name "AMIB Utilities 11.7" 2-8-3-Caption

شده بـا تعريفي رشتهفرض مقدار اين عبارت برابر با پيشي گونهبه . رود ي نصب به كار مي اين دستور براي تغيير عنوان پنجره بـراي كـاري غيـر از نـصب يـك برنامـه NSISممكن است بخواهيد از . در انتهاي آن استSetupي و كلمه Nameدستور

. به كمك شما خواهد آمدCaptionر دستو هنگامدر اين . استفاده كنيدCaption "AMIB Utilities 11.7 Security Patch"

2-8-4-SetCompressor

.سازي در اختيار شماست فشردهگونه سه NSISي فعلي در نسخه zlib – يي كـه هـا استفاده از اين فرمت بـراي فايـل . كيلوبايت300ي ناچيز فشرده سازي بسيار سريع و استفاده از حافظه

ت برخـوردار اسـت توصـيه زمـاني گونهو همين ) mp3 و jpgمانند (اند فشرده شده تر پيش كـه سـرعت نـصب از اهميـ .شود مي

bzip2 – سازي از سرعت اين فشرده. مگابايت4ي مورد نياز تر و با حافظه قوي كمابيشسازي فشردهzlib كمتر اسـت و .گردد رعت توصيه ميسازي قابل قبول و نيازمند س براي فشرده

http://egza.wordpress.com/

Page 15: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

14ي صفحه........................................................................................................................................NSISآموزش

lzma – مگابايت اسـت و سـرعت 8فرض ي مورد نياز در حالت پيش در اين روش حافظه . سازي ممكن بيشترين فشرده ي اين روش هنگامي است كه حجم خروجي از بيشترين مورد استفاده . پايين است كمابيشها سازي و بازكردن داده فشرده

تابعي lzmaسازي مقدار فشرده . اينترنت را داريد راهگامي كه قصد انتشار خروجي از براي مثال هن . اهميت برخوردار است توانيـد مقـدار مـي SetCompressorDictSizeباكمك دستور . سازي است شده هنگام فشرده ي مصرف از مقدار حافظه

.سازي را افزايش دهيد ي مصرفي و در نتيجه قدرت فشرده حافظهSetCompressor lzma # ساز فشردهي گونهيين تع SetCompressorDictSize 12 # ي مصرفي براي افزايش قدرت تعيين حافظه

. درصد شـويد 30سازي تا حدود به اين دستور باعث افزايش قدرت فشرده SOLID/توانيد با ارسال پارامتر در صورت تمايل مي بسته را به صورت يك فايل فرض كنـد و همـه را بـا هـم هاي موجود در فايل ي همهگويد كه مي NSISارسال اين پارامتر به

ها بـه يكـديگر شـباهت داشـته باشـد، ايـن پـارامتر بيـشترين ها زياد باشد و محتواي باينري آن تعداد فايل چنانچه. فشرده كند بـه . شود استخراج مي استفاده از اين دستور با افزايش هزينه همراه است و باعث كند شدن عمليات . تأثيرگذاري را خواهد داشت

هاي فشرده شده پيش از اين فايـل بايـد بـاز شـوند تـا فايلي همه فقط قصد استخراج يك فايل را داشته باشيد، چنانچهعلاوه .قابليت باز شدن فايل فعلي فراهم شود

SetCompressor /SOLID lzma # ي يكپارچه گونهساز و تعيين فشرده # ش قدرتبراي افزايش بيش از پي

2-8-5-Icon و UninstallIcon

كافي است در مقابل اين دستورات مسير و نام فايل آيكون خود را قرار دهيد تا آيكون . استفاده از اين دو دستور بسيار ساده است تـصاوير ي گونـه ي قابل ذكر لزوم مشابه بودن اين دو آيكون است به اين معنـي كـه تعـداد و نكته. فايل خروجي را تغيير دهيد

.پذير نيست امكانمتفاوتهاي موجود در اين دو آيكون بايد يكي باشد و استفاده از فايلIcon "${NSISDIR}\ Contrib\Graphics\Icons\orange-install.ico" UninstallIcon "${NSISDIR}\ Contrib\Graphics\Icons\orange-uninstall.ico"

اسـتفاده شـده {NSISDIR}$ از ثابـت NSISي نصب براي دسترسي به شاخه كرديد،اهده كه در دو دستور بالا مش گونه همان .شود خودكار پيش از شروع كامپايل تعريف ميي گونه به NSISي اين ثابت براي سهولت دسترسي به شاخه. است

.براي استفاده در نصب خود بيابيدتوانيد بسياري از منابع از پيش آماده ي نصب برنامه روي ديسك خود مي با مراجعه به شاخه

2-8-6-InstallDir

قابـل تغييـر اسـت و همچنـين بـا directoryي اين مسير در صـفحه . فرض نصب است ي مسير پيش اين دستور تعيين كننده ) الفپيوستمراجعه كنيد به (. مربوط قابل بررسي استCallBackاستفاده از تابع

InstallDir "$PROGRAMFILES\AMIB\Utilities 11.7"

InstallDir "$EXEDIR" ; ي نصب فرض به مسير اجراي برنامه تعيين مسير پيش

2-8-7-InstallDirRegKey

چنانچـه براي مثـال (ي شما در يك شاخه از رجيستري ويندوز ذخيره شده باشد به دلايل مختلف امكان دارد مسير نصب برنامه در چنين شرايطي ايـن دسـتور ). افزار ديگر باشد افزار يا يك پلاگين براي يك نرم نرم ي قبلي روزرساني نسخه اين نصب براي به

افـزار كند و چنانچه مقداري داشته باشد، آن را به عنوان مسير نصب نـرم به صورت خودكار يك رشته از رجيستري را بررسي مي

http://egza.wordpress.com/

Page 16: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

15ي صفحه........................................................................................................................................NSISآموزش

شود و فقط بخش مسير آن بـه عنـوان مـسير نـصب مي نام فايل حذف ي موردنظر نام يك فايل باشد، اگر رشته . قرارخواهد داد .انتخاب خواهد شد

InstallDirRegKey HKLM "Software\NSIS" "" ;انتخاب مسير نصب از رجيستري ; )درصورت وجود(

هـاي رجيـستري بـراي دسترسـي بـه شـاخه . ي اصلي رجيستري استفاده شـده اسـت به عنوان شاخه HKLMدر دستور بالا از هـاي اصـلي ي فهرسـت شـاخه بـراي مـشاهده .ها مانند مثال بالا استفاده كنيد ي آن شده ها يا از كوتاه وانيد از نام كامل آن ت مي

در ادامه مراجعه كنيد» دستورات رجيستري«رجيستري به بخش 2-8-8-LicenseData

txt يـا rtfتوانـد فرمت فايـل متنـي مـي . شود ميي مجوز از اين دستور استفاده براي تعيين فايل متني مورد استفاده در صفحه .ي متن مجوز را تغيير دهيد زمينه توانيد رنگ پس ميLicenseBkColorهمچنين با استفاده از دستور . باشد

LicenseData "AMIB.rtf" LicenseBkColor 112233 ;تعيين رنگ زمينه با مشخصات ; ١٧ قرمز ٣۴ سبز ۵١ آبي

LicenseBkColor 000000 ;تعيين رنگ زمينه به سياه

2-8-9-CRCCheck

كنـد تـا خطاهـاي احتمـالي را با بررسي محتويات خود تـلاش مـي NSISدر ابتداي نصب و پيش از شروع كار نصب، خروجي .ديده جلوگيري كنيد ي نصب آسيب رديابي كند و از اجراي برنامه

رد نصب را تا حدودي بالا ببريد ولي با اين كار امكان ايجاد خطاهـاي غيـر توانيد با خاموش كردن اين بررسي، سرعت عملك مي .بيني را افزايش خواهيد داد قابل پيش

onديگر پارامترهاي قابل قبول براي اين دسـتور . فراخواني كنيد offرا با پارامتر فوق دستور ،براي غير فعال كردن اين بررسي NCRC/ كاربر با ارسال پـارامتر چنانچه(و بررسي اجباري ) فرض پيش(ال كردن بررسي هستند كه به ترتيب براي فعforce و

.روند به كار مي) به نصب، قصد غير فعال كردن آن را داشت 2-8-10-ChangeUI

امكـان ايجـاد تغييـرات در شـكل و NSIS. رسـند هايي كه تا كنون ايجاد كرديم بسيار ساده و قديمي به نظر مي ظاهر خروجي ي ي صـفحه گيرد كه تعيين كننده اين دستور دو پارامتر مي . سازد فراهم مي ChangeUIها را با استفاده از دستور ي پنجره اندازه

.مورد نظر براي ايجاد تغيير و فايل حاوي اطلاّعات پنجره استChangeUI all "${NSISDIR}\Contrib\UIs\sdbarker_tiny.exe"

http://egza.wordpress.com/

Page 17: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

16ي صفحه........................................................................................................................................NSISآموزش

شـما نيـز . هاي كاربر آمـاده را مـشاهده خواهيـد كـرد ي آماده از رابط ذكر شده در مثال بالا، چندين نمونه ي با مراجعه به شاخه هاي براي اين كار از يكي از فايل. رابط دلخواه خود را ايجاد نماييدResource Hackerاي مانند توانيد با استفاده از برنامه مي

براي جلـوگيري از ايجـاد مـشكلات . تغييرات لازم را بر روي آن ايجاد نماييد ي فوق يك كپي بگيريد و سپس موجود در شاخه . آن شيء را خاموش نماييدVisibleاحتمالي از حذف اشياي موجود خودداري كنيد و در صورت نياز صفت

.هاي قابل قبول اين دستور استفاده نماييد ي مورد نظر بايد از ثابت براي اشاره به صفحه

IDD_LICENSE IDD_DIR IDD_SELCOM IDD_INST IDD_INSTFILES IDD_UNINST IDD_VERIFY

. صفحاتي همه براي تغيير دادن allو يا مانند مثال از ثابت 2-8-11-BrandingText

فـرض اين متن بـه صـورت پـيش . كنيم آيد از اين دستور استفاده مي براي تغيير متني كه در بخش پايين نصب به نمايش درمي كـه بـه NSISتوانيد اين مـتن را تغييـر ندهيـد تـا از شود تا جايي كه مي توصيه مي. است Nullsoft Install System برابر

.صورت رايگان در اختيار شماست، حمايت كرده باشيد بـه عنـوان « » ي خـالي از يـك فاصـله ي خالي و براي حذف كردن اين عبـارت، فرض از يك رشته براي قراردادن مقدار پيش

.پارامتر اين دستور استفاده كنيدBrandingText "تغيير متن # "اين متن را عوض نكنيد

BrandingText "" # فرض متن پيش

BrandingText " " # متن خالي

2-8-12-AutoCloseWindow

درصورتي كه از اين . شود عمليات مي ي نصب پس از پايان باعث بسته شدن خودكار پنجره trueاستفاده از اين دستور با پارامتر در Quitتوانيد با دستور همچنين مي . ي نصب در اختيار كاربر است شدن پنجره فرض بسته به صورت پيش دستور استفاده نكنيد،

.ها يا توابع در هر زماني به نصب خاتمه دهيد داخل بخشAutoCloseWindow true

http://egza.wordpress.com/

Page 18: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

17ي صفحه........................................................................................................................................NSISآموزش

2-8-13-SilentInstall دهيد بـه ها را نمايش مي هايي كه شما آن مراحل نصب غير از پيام ي همه ، به آن silentاين دستور و ارسال پارامتر با فراخواني

.فرض استفاده خواهد شد ها از مقادير پيش بخشهمگيصورت مخفي انجام خواهد شد و براي در اسـكريپت خـود MessageBoxتي مانند را داريد، فراموش نكنيد كه از دستورا ) Silent(صدا قصد ساخت نصب بي چنانچه

.ها جلوگيري به عمل آوريد مربوط به اين كار از نمايش آن با كمك دستورات شرطيِ،استفاده نكنيد و يا در صورت استفادهSilentInstall silent Section دستورات نصب # IfSilent +2 # صدا پرش به دو دستور جلوتر در صورت نصب بي MessageBox MB_OK "نصب به پايان رسيد" SectionEnd

2-8-14-SetFont

ي فونت اين دستور دو پارامتر نام و اندازه . كنيم صفحات از اين دستور استفاده مي ي همهبراي تغيير دادن فونت استفاده شده در .كند را دريافت مي

SetFont "Tahoma" 10 2-8-15-ShowInstDetails

تواند شود، توسط كاربر قابل مشاهده نيست و كاربر در صورت نياز مي عملياتي كه در حين نصب انجام مي فرض پيش ي گونهبه . بايد اين دستور را صدا بزنيد و يكي از پارامترهاي زير را به آن ارسال نماييد براي تغيير اين عملكرد،. ها را مشاهده كند آن

hide –ات مخفي و قاب–فرض حالت پيشط كاربر عمليل نمايش توس. show – ات قابل مشاهدهعملي. nevershow –ط كاربرات مخفي و غير قابل نمايش توسعملي .

http://egza.wordpress.com/

Page 19: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

18ي صفحه........................................................................................................................................NSISآموزش

. شـود شود و مانع نمايش فعاليت در حـال اجـرا نمـي توجه كنيد كه فراخواني اين دستور فقط شامل نمايش ليست عملكردها مي هـا ها استفاده كنيـد كـه در ادامـه بـه شـرح آن عات بايد از دستورات قابل اجرا در بخش براي جلوگيري از نمايش هرگونه اطّلا

.خواهيم پرداخت 2-8-16-XPStyle

هـاي براي اينكـه جلـوه . داشتند 98هاي موجود در ويندوز هايي كه تا كنون مشاهده كرديم ظاهري شبيه به برنامه نصب همگي . را به دستور فوق ارسال كنيمonمال شود بايد پارامتر بر روي اشياي موجود اعXPبصري ويندوز

XPStyle on

.شود ي حذف را نيز شامل مي فراخواني اين دستور ظاهر برنامه

ها تا كنون مرور آموخته-2-8-17

. مطالعه كنيد را با دقتّ مثال زير و توضيحات آنكه تا كنون آموختيم سراسري ي پهنه با عملكرد دستورات آشنايي بيشتربراي

!define AppName "AMIB Tools" # ي برنامه در ثابت تعريف نام و نسخه !define AppVer "2.25" #براي استفاده در دستورات ديگر OutFile "${AppName} Setup.exe" #تعيين نام خروجي با استفاده از ثابت SetCompressor /SOLID lzma # سازي و فشردهي گونهتعيين SetCompressorDictSize 6 # ي مورد استفاده حافظه Icon "AMIB.ico" #تعيين آيكون براي خروجي Name "${AppName} ${AppVer}" # ها تعيين نام برنامه با آمك ثابت Caption "${AppName} ${AppVer} Installer" # ي نصب تعيين صريح عنوان پنجره InstallDir "$PROGRAMFILES\${AppName}" # فرض نصب تعيين مسير پيش

http://egza.wordpress.com/

Page 20: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

19ي صفحه........................................................................................................................................NSISآموزش

ShowInstDetails nevershow #عدم نمايش فهرست اعمال انجام شده Page license #تعيين ترتيب نمايش صفحات Page components Page directory page instfiles LicenseData 'AMIB.rtf' #فايل حاوي متن مجوّز استفاده از برنامه AutoCloseWindow true # ي نصب پس از پايان بستن خودآار پنجره XPStyle on #XP هاي تصويري ي نصب از جلوه استفاده Section "!بخش آزمايشي با عنوان درشت" # نخستعمليّات مورد نياز در بخش SectionEnd Section /o " " انتخابي توسّط آاربر٢بخش آزمايشي # ٢بخش انجام آارهاي لازم در SectionEnd Section "-بخش مخفي" # ٣انجام آارهاي لازم در بخش SectionEnd

دستورات كاربردي كامپايلر-2-8-18

دهنـد، از تعـدادي دسـتور مانند كامپايلرهاي ديگر علاوه بـر دسـتوراتي كـه خروجـي را تحـت تـأثير قـرار مـي NSISكامپايلر ها با كمـك امكانـات داخلـي ي اين دستورات انجام عملياتي است كه انجام آن ورد استفاده م. كند پردازنده نيز پشتيباني مي پيش

NSIS كردن مانند فشرده . پذير نيست امكانStub ز ( خروجي، تغيير دادن يك فايلهـاي بـراي سـاخت نـصب ) مثلا فايل مجو ...متفاوت در هر كامپايل، و

بـراي كـسب اطّلاعـات بيـشتر بـه . ها آشنا شـويم اين دستورات و كاربرد آن سطحي با ي گونهكنيم به در اين قسمت سعي مي .راهنماي برنامه مراجعه كنيد

- !cd - در شروع كامپايل مسير فعلـي معـادل مـسير . ي تغيير مسير فعلي را بر عهده دارد اين دستور مانند محيط داس وظيفه .گيرد فايل اسكريپت قرار مي

!cd "C:\AMIB\Utils"

- !include - ات يك اسكريپته كنيد كه بـا . كنيم در اسكريپت فعلي از اين دستور استفاده مي خارجي براي ادغام محتويتوج

فايل ادغام شده حاوي دستورات وابسته بـه مـسير باشـد، چنانچهاستفاده از اين دستور مسير فعلي همچنان تغيير نخواهد كرد و .ممكن است با پيام خطا مواجه شويد

http://egza.wordpress.com/

Page 21: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

20ي صفحه........................................................................................................................................NSISآموزش

. جلوگيري كنيدincludeاز ايجاد پيام خطا در صورت عدم وجود فايل توانيد ميNONFATAL/با كمك پارامتر !include "myFuncs.nsh" !include /NONFATAL "Funcs2.nsh" # تواند موجود نباشد اين فايل مي

- !addincludedir - هاي مورد جستجوي براي اضافه كردن يك شاخه به فهرست شاخه include ها از اين دستور استفاده

هاي موجود در اين فهرست شاخه. در اين فهرست قرار دارد NSIS هاي includeي فرض فقط شاخه به صورت پيش . كنيم مي .ها موجود نباشد پيام خطايي ظاهر خواهد شد در هيچ يك از اين شاخهinclude فايل چنانچهشوند و به ترتيب جستجو مي

!addincludedir "C:\AMIB\NSIS_Includes"

- !addplugindir - ي فرض فقط شاخه در حالت پيشPlugins هـا مـورد ي نـصب برنامـه بـراي پلاگـين موجود در شاخه

.كنيم براي تغيير دادن اين رفتار، از دستور فوق استفاده مي. گيرد جستجو قرار مي!addplugindir myFolder myPlugin::someFunction # راخواني يك تابع از يك پلاگينف

- appendfile - ي متني به انتهاي يك فايل اضافه كردن رشته.

!tempfile FILE # نام آن» تعريف«ايجاد يك فايل موقّت و !appendfile "${FILE}" "XPStyle on$\n" #اضافه آردن رشته به انتهاي فايل !appendfile "${FILE}" "Name 'test'$\n" # فه آردن يك خط ديگراضا !include "${FILE}" #ادغام فايل موقّت در اسكريپت فعلي !delfile "${FILE}" #حذف فايل موقّت !undef FILE # نام فايل موقّت» تعريف«حذف

- !delfile - به مثال موجود در دستور . (حذف يك فايل از روي ديسك!appendfileمراجعه كنيد ( - !execute - ي كامپايل اسكريپت فراخواني يك فايل اجرايي و برگشت فوري به ادامه.

!execute '"%WINDIR%\notepad.exe" "${NSISDIR}\license.txt"'

- !packhdr - ـه بـه اينكـه پـيش از كامپايـل . شـود كردن فايل اجرايي خروجي از اين دستور استفاده مي براي فشردهبـا توج

NSISبنـابراين . وجود ندارد Stubsي موجود در شاخه stubكردن فايل شود، امكان فشرده جرايي ايجاد مي تغييراتي در فايل ا سـازي كـه شـما اين دستور را فراخواني كنيد، خروجي را با توجه بـه فـشرده چنانچهپس از ايجاد تغييرات لازم در فايل اجرايي

.م خروجي شما كاسته شودكند تا چند كيلوبايتي از حج انتخاب كنيد فشرده ميكـردن همـان فايـل لازم بـراي فـشرده پذيرد كه پارامتر نخست نام فايلي موقتّ و پارامتر دوم فرمـان اين دستور دو پارامتر مي

:خواهد بود!packhdr "$%TEMP%\tmpstub.tmp" '"C:\UPX\upx.exe" "$%TEMP%\tmpstub.tmp"'

UPXسـاز كند، فشرده شما ايجاد مي Tempي در شاخه tmpstub را با نام Stubرايي فايل اج NSISبا توجه به دستور بالا، . آن را در ابتداي خروجي قرار خواهد دادUPXكند و پس از فشرده شدن توسط را با پارامتر مورد نظر فراخواني مي

- !system - تور استي اين دس ي مقدار بازگشتي وظيفه فراخواني يك فايل اجرايي و مقايسه.

گرهاي توانيد با كمك مقايسه را نيز اجرا كنيد و نيز ميBatch Fileتوانيد دستورات قابل اجرا در محيط با كمك اين دستور ميباشد، فرآيند كامپايـل ) False(نادرستي مقايسه چنانچه نتيجه . مقدار خروجي را با مقدار دلخواه مقايسه كنيد >، و <، <>، =

.دمتوقفّ خواهد ش

http://egza.wordpress.com/

Page 22: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

21ي صفحه........................................................................................................................................NSISآموزش

!system "echo Hello > myFile.txt" # )نوشتن متن داخل فايل(اجراي فرامين داس

!system "c:\UPX\upx.exe" <> 0 # ي خروجي آن اجراي برنامه و مقايسه # خروجي غير از صفرچنانچه -با صفر # شود باشد، آامپايل متوقّف مي

- !tempfile - عبارتي كه در مقابل اين دستور بـه كـار رود . شود ايجاد يك فايل موقّتي جديد مي فراخواني اين دستور باعث

.شود و مسير فايل مورد نظر را در خود جاي خواهد داد به عنوان يك ثابت تعريف مي!tempfile myTempFile #ايجاد فايل موقّت و تعريف نام آن !delfile "${mytempFile}" #حذف فايل موقّت از ديسك !undef myTempFile #حذف تعريف نام فايل موقّت

!tempfile tmpStub # موقّت ايجاد فايل فشرده آردن سرآمد فايل خروجي با آمك گرفتن از نام فايل موقّت ايجاد شده#!packhdr "${tmpStub}" '"C:\UPX\upx.exe" "${tmpStub}"'

ها ي توابع و بخش پهنهدستورات -2-9 2-9-1-SetOutPath

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

ي مورد نظر در صورت موجـود با اجراي اين دستور شاخه .شود نصب به عنوان مسير خروجي تعيين مي نكنيد، مسير اجراي فايل .نبودن ايجاد خواهد شد

Section SetOutPath $INSTDIR SectionEnd

ر در ابتـداي نـصب . استفاده شد SetOutPath به عنوان پارامتر ارسالي به INSTDIR$در مثال بالا از متغير مقـدار اين متغيـي موجــود در رجيــستري هنگــام اســتفاده از دســتور يــا رشــتهInstallDirفرضــي معــادل پــارامتر ارســالي بــه دســتور پــيش

InstallDirRegKeyيا مقدار خالي خواهد گرفت . ا در خـود بنابراين اين متغير هميشه محلّ نهايي بـراي نـصب ر . تواند اين مقدار را تغيير دهد كاربر مي directoryي در صفحه

توانيـد كند و بـا كمـك آن مـي همچنين در هنگام حذف، اين متغير مسير فعلي نصب را در خود نگهداري مي . كند نگهداري مي .هاي برنامه را از سيستم مقصد پاكسازي كنيد فايل

2-9-2-File

با فراخواني اين دستور و تعيين . عهده دارد بندي فايل در زمان كامپايل و استخراج در زمان اجرا را بر ي بسته وظيفه Fileدستور ها در بسته متناسب بـا ترتيب قرار گرفتن فايل. گيرند شدن قرار مي هاي مورد نظر در صف فشرده نام فايل به عنوان پارامتر، فايل .فراخواني اين دستور خواهد بود

براي استخراج . ام يك فايل در جلوي اين دستور است آن تعيين ن ي گونهساده ترين . صدا زدن اين دستور اشكال گوناگوني دارد . به عنوان نام فايل استفاده كرد? و *توان از عملگرهاي ها مي اي از فايل دسته

File "C:\Windows\*.bmp" # هاي تصويري در بسته قرار دادن فايل

http://egza.wordpress.com/

Page 23: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

22ي صفحه........................................................................................................................................NSISآموزش

مبدأ است و مـسير اسـتخراج فايـل متناسـب بـا ها در كامپيوتر كنيد مسير قرارگيري فايل مسيري كه در دستور بالا مشاهده مي .شود تعيين ميSetOutPathفراخواني دستور

SetOutPath "C:\MyApp" #تعيين مسير خروجي براي استخراج فايل File "AppFiles\*.*" # ها در بسته و استخراج فايلي همهقرار دادن # ي بالا ها در مسير تعيين شده آن

فرض نصب صرف نظر كنيد و فايل مورد نظر را با نام و مـسير دلخـواه خـود توانيد از مسير پيش مي oname/با كمك پارامتر

.محدوديت اين پارامتر پشتيباني نكردن از چندين فايل است. ذخيره كنيدSetOutPath "C:\AA" # ها تعيين مسير خروجي فايل File /oname="C:\BB\b.exe" "myApp\a.exe" # فرض و نام از مسير پيشصرف نظر فعلي فايل مبدأ#

هاي موجود در شاخه را شـامل ارسال نام يك شاخه به دستور فقط فايل گونه و همين ? و *هاي با نويسه Fileفراخواني دستور

. استفاده كنيدr/هاي زير مجموعه بايد از پارامتر شاخهي همهها و فايلي همهبراي قرار دادن . شود ميFile /r "myApp" # ها شاخهي همهي مورد نظر و اين دستور شاخه # شود هاي زيرمجموعه را شامل مي و فايل

File /r "myApp\*.txt" # ها هاي متني موجود در شاخه و زيرمجموعه فايل

:ديگر پارامترهاي قابل قبول براي اين دستور عبارتند از

/x1- بپيوستمراجعه كنيد به براي اطلاّعات بيشتر . (ها در بسته ايل براي قرار ندادن گروهي از ف( /nonfatalسازي براي عدم ايجاد خطاي جدي در صورت عدم وجود چيزي براي فشرده /aها هنگام استخراج ها در بسته و بازسازي آن براي نگهداري مشخّصات فايل

2-9-3-CopyFiles

هـا بـه مـسيرهاي براي كپي اين گونه فايل . ر كنار فايل اجرايي نصب قرار داده باشيد هاي نصب را د ممكن است بعضي از فايل .كند اين دستور ما را ياري ميدلخواه

CopyFiles "$EXEDIR\Files\*.*" "$INSTDIR" # ي مقصد به شاخهها فايل ي همهآپي بـراي . ي كپـي وينـدوز شـود هـا در پنجـره پي فايلي بالا ممكن است باعث نمايش روند ك استفاده از اين دستور به شكل ساده

باعـث FILESONLY/همچنين با استفاده از پـارامتر . را به اين دستور ارسال كنيد SILENT/جلوگيري از اين كار بايد پارامتر اسـت، بـه هاي كپي و در نهايت قرار دادن يك عدد در انتهاي دستور كه معادل حجم فايل . ها خواهيد شد كپي شدن فقط فايل

NSISي مقصد كمك خواهيد كرد سازي و بررسي فضاي خالي در شاخه در بهينه. CopyFiles "$EXEDIR\VBAME.dll" "$SYSDIR" # هاي نصب فايل مربوط به زبان # ي سيستم راست به چپ در شاخه # )مربوط به ويژوال بيسيك(

CopyFiles /SILENT "$SYSDIR\kbdfa.dll" "$SYSDIR\dllcache"

.بيني خواهد بود در غير اين صورت نتايج غير قابل پيش. تعيين مسير خروجي به صورت كامل در اين دستور الزامي است

http://egza.wordpress.com/

Page 24: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

23ي صفحه........................................................................................................................................NSISآموزش

2-9-4-MessageBox ر هـا ، و پـارامت آيكون و دكمه ي گونه پارامتر اين دستور نخستين .ي اين دستور نمايش پيام، پرسش، يا اخطار است مورد استفاده

.دنكن دوم متن پيام را تعيين ميMessageBox MB_OK "Hello"

.كنيد هاي ممكن را مشاهده مي در ادامه فهرست انواع مختلف پيام و دكمه

MB_OKي نمايش فقط يك دكمهOK MB_OKCANCELهاي نمايش دكمهOK و Cancel MB_ABORTRETRYIGNOREهاي دكمهAbort ،Retry و ،Ignore MB_RETRYCANCELهاي دكمهRetry و Cancel MB_YESNOهاي دكمهYes و No MB_YESNOCANCELهاي دكمهYes ،No و ،Cancel MB_ICONEXCLAMATION ب( نمايش آيكون اخطارعلامت تعج( MB_ICONINFORMATION اطلاّعاتنمايش آيكون MB_ICONQUESTION نمايش آيكون پرسش MB_ICONSTOP نمايش آيكون هشدار MB_USERICON ي نصب نمايش آيكون برنامه MB_TOPMOST ها پنجرهي همهنمايش پيام جلوتر از MB_SETFOREGROUND ي پيام به جلو اصرار بر انتقال پنجره MB_RIGHT نمايش متن پيام در سمت راست پنجره MB_RTLREADING هايي كه مانند فارسي با زبان راست به چپ هستند مورد استفاده براي پيام MB_DEFBUTTON1 دكمه انتخاب باشدنخستينفرض به صورت پيش MB_DEFBUTTON2 مين دكمه انتخاب باشددو MB_DEFBUTTON3 مين دكمه انتخاب باشدسو

استفاده كنيم» |«ي پايپ براي تركيب كردن پارامترهاي فوق بايد از نويسهMessageBox MB_YESNO|MB_ICONQUESTION "Install?" # هاي رسش با دآمهپآيكون #Yes و No

براي جلوگيري . پيامي كه به اين صورت در برنامه گنجانده شود حتّي در صورت ساكت بودن نصب هم به نمايش در خواهد آمد .كنيم فرض استفاده مي ي پيش ي دكمه به همراه شناسهSD/از رخداد اين اتّفاق از پارامتر

MessageBox MB_YESNO|MB_ICONINFORMATION "Install?" /SD IDYES

.كنيد ها را در زير مشاهده مي ي دكمه فهرست شناسه IDABORTي دكمهAbort IDCANCELي دكمهCancel IDIGNOREي دكمهIgnore IDNOي دكمهNo IDOKي دكمهOK IDRETRYي دكمهRetry IDYESي دكمهYes

http://egza.wordpress.com/

Page 25: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

24ي صفحه........................................................................................................................................NSISآموزش

هاي فوق و تعيين يك برچـسب، محلّـي كـه ه است، با كمك گرفتن از شناسه براي بررسي اينكه پاسخ كاربر به پرسش چه بود .كنيم بايد به آن پرش شود را تعيين مي

Function .onInit # شود اين تابع پيش از شروع نصب فراخواني مي MessageBox MB_YESNO|MB_ICONINFORMATION "Install?" IDYES ContinueInstall Abort # نصب را ادامه نده،منفيدرصورتي جواب ContinueInstall: # ي نصب خروج از تابع و ادامه FunctionEnd

2-9-5-CreateShortCut

. كنـد مياين دستور ما را در انجام اين كار ياري . يكي از نيازهاي اصلي هنگام نصب يك برنامه است ) Shortcut(ايجاد ميانبر .كند تند از مسير ايجاد ميانبر و مسير فايلي كه ميانبر به آن اشاره ميهاي اجباري براي اين دستور عبار پارامتر

CreateShortCut "$STARTMENU\Programs\myApp.lnk" "$INSTDIR\myApp.exe"

در هنگام اجراي نصب با مسير معادل خود در سيستم مقـصد INSTDIR$ و STARTMENU$دانيد عبارات گونه كه مي همانبـراي جلـوگيري از چنـد قطعـه شـدن . ي فاصله قرار بگيرد هاي فوق نويسه نابراين ممكن است ميان رشته ب. شوند جايگزين مي

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

يـل بـه اسـتفاده از پارامترهـاي آخـر داريـد بايـد تما چنانچـه . ديگر پارامترهاي قابل قبول براي اين دستور به شرح زيـر اسـت . بتواند هدف شما را از ارسال پارامترها تشخيص دهدNSISپارامترهاي ماقبل آن را با مقادير مناسب پر كنيد تا

.ي هدف پارامترهاي ارسالي به برنامه .شده نام و مسير فايل آيكون ميانبر ساخته .يكوني ترتيبي آيكون در فايل حاوي آ شماره .تنظيمات شروع .كليد ميانبر براي اجراي فايل ميانبر ايجاد شده .توضيحات فايل ميانبر

2-9-6-Sleep

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

.ساختار فراخواني اين دستور به شكل زير استSleep 2000 # ثانيه٢ثانيه يا ميلي٢٠٠٠توقّف اجراي نصب به مدّت

2-9-7-CreateDirectory

. ام اين كار ياري خواهد كـرد در انج اين دستور شما را . ها ايجاد شاخه است يكي از نيازهاي اساسي براي نصب بسياري از برنامه .هاي مورد نياز را ايجاد نمود توان بدون استفاده از اين دستور نيز شاخه مشاهده كرديد ميFileكه در دستور گونه همان

CreateDirectory "$PROGRAMFILES\AMIB Tools"

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

http://egza.wordpress.com/

Page 26: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

25ي صفحه........................................................................................................................................NSISآموزش

2-9-8-RMDir ي مورد نظر شود، غير جـاري بـودن براي اينكه اين دستور موفّق به حذف شاخه .هاست عملكرد اين دستور در پاك كردن شاخه

اسـتفاده r/ز پارامتر هاي زير مجموعه بايد ا ها و فايل شاخه ي همهبراي حذف . ي مورد نظر و خالي بودن آن الزامي است شاخه .كنيم

SetOutPath "$SYSDIR" #تغيير مسير جاري براي موفّق بودن حذف RMDir /r "$INSTDIR" # هاي زير مجموعه ها و فايل شاخهي همهحذف

تـوان پـس از مـي REBOOTOK/حذف برنامه مقدور نباشد، با ارسـال پـارامتر ها هنگام نصب يا حذف بعضي از فايل چنانچه

توانيد در صورت تمايل روشن خواهد شد و شما مي Rebootدر چنين حالتي فلگ . اندازي مجدد ويندوز اين كار را انجام داد اهر .اندازي كنيد پس از پايان نصب سيستم را مجدد راه

RMDir /r /REBOOTOK "$INSTDIR" IfRebootFlag 0 +3 #پرش به سه دستور جلوتر در صورت عدم نياز # اندازي مجدّد و ادامه در صورت نياز به راه MessageBox MB_YESNO "Reboot now?" IDNO +2 # اندازي مجدّد پرسش براي راه Reboot # اندازي مجدد سيستم راه

2-9-9-Rename

سـتور بـراي جـا بـه جـا كـردن توانيد از اين د علاوه بر تغيير نام مي . شود براي تغيير نام فايل يا شاخه از اين دستور استفاده مي ي قبلاً موجود، در هنگام تغيير نام و محل بايد توجه كنيد كه تغيير نام به يك فايل يا شاخه . ها نيز كمك بگيريد ها و شاخه فايل .ها به درايوي غير از درايو مبدأ شكست خواهد خورد پذير نيست و همين گونه تغيير محلّ شاخه امكان

Rename "$PLUGINSDIR\myFile.dat" "$INSTDIR\myFile.exe" #تغيير نام و محل

شـود مـورد اسـتفاده قـرار تعيين مـي SetOutPath مسير دقيق را به اين دستور ارسال نكنيد مسير فعلي كه با دستور چنانچه .خواهد بود) EXEDIR$(خواهد گرفت و چنانچه مسير فعلي را تعيين نكرده باشيد، مسير فعلي برابر با مسير فايل نصب

شـود اندازي مجدد سيستم انجام مـي ، تغيير نام ناموفّق بعد از راه REBOOTOK/مانند چندي ديگر از دستورات با كمك پارامتر

).RMDirي مثال مراجعه كنيد به دستور براي مشاهده( 2-9-10-Delete

ــارامتر Rename و RMDirدرســت هماننــد دســتورات . ي ايــن دســتور اســت حــذف فايــل وظيفــه ــز از پ ، ايــن دســتور ني/REBOOTOKكند پشتيباني مي.

استفاده كنيـد ? و *هاي توانيد از نويسه براي تعيين نام فايل مي . براي حذف يك فايل تعيين مسير و نام دقيق آن الزامي است . ها را هدف قرار دهيد تا گروهي از فايل

دهد كه ولي اين اتّفاق تنها زماني رخ مي. روشن خواهد شد) Error Flag ( خطا قادر به حذف فايلي نباشد، پرچمNSISچنانچه .فايل موجود باشد

Delete /REBOOTOK "$SYSDIR\myDll.dll" #حذف يك فايل و تلاش مجدّد در صورت ناموفّق بودن پس از شروع ويندوز#

http://egza.wordpress.com/

Page 27: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

26ي صفحه........................................................................................................................................NSISآموزش

Delete "$INSTDIR\*.tmp" # صها با پسوند مشخّ حذف گروهي از فايل 2-9-11-Quit

صدا يا معمـولي مـورد اسـتفاده هاي بي تواند در نصب اين دستور مي . كنيم براي خروج فوري از نصب اين دستور را فراخواني مي .قرار گيرد . كليك كندCloseي از اين دستور استفاده نكنيد، براي بسته شدن نصب كاربر بايد بر روي دكمهچنانچه

MessageBox MB_ICONINFORMATION "Installation completed successfully." Quit

دستورات رجيستري-2-9-12

.ايجاد تغييرات در رجيستري ويندوز بنابر نيازهاي مختلف كمابيش در هر نصبي لازم است .تواند يكي از موارد زير باشد ي اصلي مي ه از دستورات رجيستري شاخه استفاددر هنگام

HKCR يا HKEY_CLASSES_ROOT HKLM يا HKEY_LOCAL_MACHINE HKCU يا HKEY_CURRENT_USER HKU يا HKEY_USERS HKCC يا HKEY_CURRENT_CONFIG HKDDيا HKEY_DYN_DATA HKPD يا HKEY_PERFORMANCE_DATA

كـردن، و براي ايجاد، پـاك .هاي مختلفي داشته باشند توانند گونه رجيستري ويندوز تشكيل شده از شاخه و متغير كه متغيرها مي

:ها و متغيرها دستورات زير در اختيار شما هستند پردازش شاخه DeleteRegKey - هاي اين دستور عبارتند از نام پارامتر. پذير است ها از رجيستري با اين دستور امكان كردن شاخه پاك

.شود هاي خالي مي باعث تنها پاك شدن شاخهifempty/استفاده از پارامتر . ي فرعي براي حذف ي اصلي و شاخه شاخهDeleteRegKey HKLM "Software\AMIB" # ها حذف شاخه و تمام زير شاخه

DeleteRegKey /ifempty HKLM "Software\AMIB" #حذف شاخه در صورت خالي بودن

DeleteRegValue - ر دلخواه را از رجيستري پاك كرد با كمك اين دستور مير . توان متغي در صورت عدم وجـود متغيـ

.در رجيستري يا رخداد اشكال در فرآيند، پرچم خطا روشن خواهد شدDeleteRegValue HKLM "Software\AMIB" "AppPath"

EnumRegKey - عـلاوه . شود هاي موجود در رجيستري، از اين دستور استفاده مي براي به دست آوردن فهرست شاخه

ي مورد نظـر اسـت، نيـز ي ترتيبي شاخه ي شماره ي مسير، يك پارامتر عددي كه تعيين كننده دهبر پارامترهاي تعيين كنن ها باشـد، مقـدار ي تعداد شاخه ي ارسال شده فراتر از محدوده چنانچه شماره . ارسال شود EnumRegKeyبايد به دستور

.هد شدو چنانچه خطايي رخ دهد، پرچم خطا نيز روشن خوا. برگشتي خالي خواهد بود

http://egza.wordpress.com/

Page 28: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

27ي صفحه........................................................................................................................................NSISآموزش

StrCpy $0 0 #قرار دادن مقدار صفر در متغيّر loop: #تعيين برچسب براي شروع حلقه EnumRegKey $1 HKLM Software $0 # ي موردنظر در متغيّر قرار دادن نام شاخه StrCmp $1 "" done #پرش به پايان حلقه در صورت نبودن شاخه IntOp $0 $0 + 1 # يك واحد به متغيّر عدديي اضافه # ي خوانده شده از رجيستري نمايش نام شاخه MessageBox MB_YESNO|MB_ICONQUESTION "$1$\n$\nMore?" IDYES loop done: #تعيين برچسب براي پايان حلقه

EnumRegValue - رهاي موجـود در يـك شـاخه از ايـن دسـتور اسـتفاده مـيروش . يمكن ـ براي ايجاد فهرست متغي

ها، متغيرها فهرسـت با اين تفاوت كه در برابر برگشت دادن شاخه . است EnumRegKeyفراخواني درست همانند دستور .خواهند شد

StrCpy $0 0 #مقداردهي متغيّر با عدد صفر loop: #تعيين برچسب براي شروع حلقه ClearErrors #پاك آردن پرچم خطا براي تشخيص دادن خطا # ندن ترتيبي متغيّرهاي رجيستري با توجه به عدد ارساليخوا EnumRegValue $1 HKLM Software\Microsoft\Windows\CurrentVersion $0 IfErrors done #پرش به پايان حلقه در صورت رخداد خطا IntOp $0 $0 + 1 #اضافه آردن يك واحد به متغيّر ترتيبي خواندن مقدار متغيّر فهرست شده#ReadRegStr $2 HKLM Software\Microsoft\Windows\CurrentVersion $1 # ي آار نمايش نام متغيّر و مقدار آن و پرسش براي ادامه MessageBox MB_YESNO|MB_ICONQUESTION "$1 = $2$\n$\nMore?" IDYES loop done:

ReadRegDWORD - رهاي رجيستري انواع مختل گونه كه گفته همانبـراي خوانـدن مقـدار . پذيرند في را مي شد، متغي

ر رجيـستري ي اصلي، شاخه متغير خروجي، شاخه . كنيم اين دستور را فراخواني مي ) بيتي 32(عددي ي فرعي، و نـام متغيـشود و پرچم خطا روشن خواهـد در صورت نبودن متغير مورد نظر، مقدار خالي برگردانده مي . پارامترهاي اين دستور هستند

.گردد شود ولي پرچم خطا نيز روشن مي چنانچه متغير مورد نظر عددي نباشد، مقدار آن خوانده ميو. شدReadRegDWORD $0 HKLM "Software\NSIS" "VersionBuild" #NSIS خواندن نگارش

ReadRegStr - رهاي رشتهر، مقدار . ي اين دستور است اي وظيفه خواندن مقدار متغيبرگشتي خالي در صورت نبود متغي

اي و نيـز شده باعث خوانده شدن عدد به صورت رشته عددي بودن متغيرِ اشاره . شود خواهد بود و پرچم خطا نيز روشن مي .گردد ايجاد يك خطا مي

ReadRegStr $0 HKLM Software\NSIS "" # فرض خواندن مقدار متغيّر پيش DetailPrint "NSIS is installed at: $0" # شده در ليست دار خواندهنمايش مق

WriteRegBin - رهاي باينري در رجيستري اين دستور را فراخواني ميمقـدار ارسـالي بايـد در . كنـيم براي نوشتن متغي

شود و چنانچه خطايي در هنگام نوشتن رخ دهـد، پـرچم شده باعث ايجاد آن مي ي اشاره عدم وجود شاخه . باشد 16مبناي .شود خطا روشن مي

WriteRegBin HKLM "Software\My Company\My Software" "Binary Value" DEADBEEF01251

http://egza.wordpress.com/

Page 29: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

28ي صفحه........................................................................................................................................NSISآموزش

WriteRegDWORD - پذير است بيت در رجيستري با اين دستور امكان32 نوشتن مقادير عددي. WriteRegDWORD HKLM "Software\My Company\My Software" "DWORD Value 1" 0xA2F4

WriteRegDWORD HKLM "Software\My Company\My Software" "DWORD Value 2" 1234

WriteRegStr -رهاي رجيستري با گونهي ايجاد يا ويرايش متغيREG_SZپذيرد با اين دستور انجام مي.

WriteRegDWORD HKLM "Software\My Company\My Software" "Name" "AMIB"

WriteRegExpandStr - ي رهاي رجيستري با گونـه ايجاد يا ويرايش متغيREG_EXPAND_STR بـا كمـك ايـن ر در رشـته مورد استفاده . پذير است دستور امكان ر هـستند ي ايـن گونـه متغيـ ماننـد . هـايي اسـت كـه خـود حـاوي متغيـ%windir%ي ويندوز جايگزين شود كه بايد با شاخه.

WriteRegDWORD HKLM "Software\My Software" "AppPath" "%WINDIR%\AMIB" iniدستورات فايل -2-9-13

. هـا نيـاز اسـت گاهي اوقات ايجاد تغييرات در اين گونه فايـل افزارهاي امروزي جايگاهي ندارند ولي در نرم iniهاي اگرچه فايل هـا و شتوانيد از دستورات خواندن و نوشتن فايل نيـز اسـتفاده كنيـد ولـي پـردازش بخ ـ ها مي براي ايجاد تغييرات در اين فايل .ي شما خواهد بود متغيرهاي موجود در آن بر عهده

.ها را مشاهده خواهيد كرد هاي زير فهرست دستورات قابل قبول و شرح كوتاهي از عملكرد آن در بخش DeleteINISec - قادر چنانچهپذيرد و اين دستور دو پارامترِ نام فايل و نام بخش را مي . حذف كامل يك بخش از فايل

.ف بخش نباشد، پرچم خطا را روشن خواهد كردبه حذ DeleteINIStr - ر از يك بخش وظيفهپارامترهاي اين دستور عبارتند از نـام فايـل، . ي اين دستور است حذف يك متغي

.نام بخش و نام متغيري كه بايد حذف شود FlushINI - وينـدوز ممكـن اسـت . كنـيم تفاده مـي براي اعمال تغييرات انجام شده بر روي فايل اصلي از اين دستور اس

). بـراي افـزايش كـارايي (ها را به ديسك سخت انتقال ندهـد دهيم در حافظه نگهداري كند و آن تغييراتي را كه انجام مي .كنيم دستورات بر روي فايل مورد نظر، از اين دستور استفاده ميي همهبنابراين پس از اجراي

ReadINIStr - ر وظيفه خواندن مقدار حرفيپارامترهاي لازم براي اين دسـتور عبارتنـد از . ي اين دستور است يك متغي .يك متغير براي نگهداري مقدار خروجي، نام فايل، نام بخش و در پايان نام متغيري كه مقدار آن بايد خوانده شود

WriteINIStr - ر در يك بخش از اين دستور استفاده مياين دستور نيازمند پارامترهاي نـام . كنيم براي نوشتن يك متغي .فايل، نام بخش، نام متغير، و مقدار متغير است

: به مثال ذيل و توضيحات آن توجه كنيدINIي استفاده از دستورات براي فراگيري بهتر شيوه

SetOutPath $INSTDIR #تغيير مسير فعلي به مسير اصلي نصب برنامه WriteINIStr "myFile.ini" "mySection" "myVar" "TRUE" #نوشتن متغيّر در فايل ReadINIStr $0 "myFile.ini" "mySection" "myVar" #خواندن مقدار متغيّر از فايل MessageBox MB_ICONINFORMATION $0 #نمايش مقدار متغيّر خوانده شده FlushINI # ي تغييرات فايل بر روي ديسك سخت ذخيره Delete "$INSTDIR\myFile.ini" #حذف فايل ايجاد شده از روي ديسك سخت

http://egza.wordpress.com/

Page 30: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

29ي صفحه........................................................................................................................................NSISآموزش

دستورات اجراي فايل خارجي-2-9-14هاي مختلف وجـود دارنـد كـه در ادامـه بـه فهرسـت و شـرح ها و فرامين در زمان نصب چند دستور با كارايي براي اجراي فايل

.ها خواهيم پرداخت عملكرد آن Exec - تنها پارامتر ايـن دسـتور نـام . پذير است ي خارجي با استفاده از اين دستور امكان ها ترين شكل اجراي برنامه ساده

در ابتدا و انتهـاي نـام ) "(ي اين دستور لزوم به كاربردن گيومه ي قابل ذكر در استفاده نكته. فايلي است كه بايد اجرا شود ي شـما در ي فاصـله باشـد، برنامـه حـاوي نويـسه از گيومه استفاده نكنيد و نام يا مسير فايـل چنانچه. فايل اجرايي است

. اجراي برنامه با كمك اين دستور باعث بازگشت فوري روند اجرا به نصب خواهد شد. اجرا نخواهد شد9xويندوزهاي Exec '"$INSTDIR\Setup2.exe" /SecretWord' #اجراي برنامه با پارامتر

ExecShell - براي مثـال بـاز كـردن . ي اين دستور است ها وظيفه غير اجرايي از فايل ي مربوط به انواع فراخواني برنامه

پذيرد كه عبارتند از نام دستوري كه بايد بـر روي اين دستور چند پارامتر مي . فرض متن يك فايل متني در ويرايشگر پيش ي اسـتفاده بـه مثـال و شـيوه تر شـدن براي روشن . ي جديد ي نمايش پنجره فايل انجام شود، نام فايل، پارامترها، و شيوه

.هاي نمايش كه در ادامه آمده توجه كنيد فهرست شيوهExecShell "" "$INSTDIR\ReadMe.txt" # فرض باز آردن فايل متني با دستور پيش

- SW_SHOWNORMAL -ي-فرض حالت پيشنمايش پنجره به صورت عاد . - SW_SHOWMAXIMIZED - بيشينه نمايش پنجره به در حالت. - SW_SHOWMINIMIZED - كمينه نمايش پنجره در حالت. - SW_HIDE -ي مخفي پنجره.

# بيشينهاجراي فرمان خاص براي باز آردن فايل متني و نمايش پنجره در حالت ExecShell "Open" "$INSTDIR\ReadMe.txt" "" SW_SHOWMAXIMIZED

ExecShell "Print" "$INSTDIR\ReadMe.txt" # ي مرتبط اپ فايل متني با برنامهچ

ExecShell "Open" "http://nsis.sf.net/" # فرض باز آردن سايت با مرورگر پيش

ExecWait - نكـات ذكـر شـده در ي همه. ي اين دستور است اجراي فايل و انتظار براي پايان يافتن عملكرد آن وظيفه

توانيد ي اجرا شده مي از برنامه) Exit Code(اي دريافت كد خروجي بر. قابل توجه هستند در اين دستور نيز Execدستور . قرار دهيدExecWaitيك متغير را به عنوان پارامتر در انتهاي دستور

ExecWait '"$INSTDIR\myProg.exe"' $0 #اجراي برنامه و دريافت خروجي در متغيّر MessageBox MB_ICONINFORMATION "Exit Code was : $0" #نمايش آد خروجي

به كـار NSISكنيد نام فايل اجرايي بايد درون گيومه قرار بگيرد و آپستروف نيز براي تعيين رشته در همان گونه كه مشاهده مي .رفته است

فايل، و جستجوي نوشتن،دستورات خواندن-2-9-15

توراتي در اختيار شماست كه در ادامه فهرسـت و ها دس هاي جديد، و جستجوي فايل ها، ساخت فايل براي ايجاد تغييرات در فايل :كنيد ها را مشاهده مي توضيحات آن

FileOpen - براي اين كار كافيست اين دسـتور را بـا . ها را باز كنيم ها ابتدا بايد آن پيش از انجام هر عملي بر روي فايل براي نوشتن، wهاي باز كردن فايل عبارتند از شرو. سه پارامتر متغير خروجي، نام فايل، و روش باز كردن فراخواني كنيم

http://egza.wordpress.com/

Page 31: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

30ي صفحه........................................................................................................................................NSISآموزش

r ،و براي خواندن a ات خوانـدن و نوشـتن حتمـاً . براي اضافه كردن به انتهاي فايلفراموش نكنيد كه پس از پايان عملي مــسير قرارگيــري فايـل را تعيــين نكنيــد مــسير فعلــي كــه بــا دســتور چنانچــه. ببنديــدFileCloseفايـل را بــا دســتور

SetOutPathشود مورد استفاده قرار خواهد گرفت تعيين مي. FileClose - براي بستن فايلي كه قبلاً با دستور FileOpen تنهـا پـارامتر ايـن دسـتور .شود باز شده است، استفاده مي

.ي فايلي است كه باز شده است دستگيرهFileOpen $0 "myFile.dat" r # ي باز آردن فايل براي خواندن و ذخيره # ي آن در متغيّر ارسالي دستگيره FileClose $0 #بستن فايل باز شده

FileRead - در چند حالت خواندن رشـته متوقـّف . ها از داخل فايل اين دستور ما را ياري خواهد كرد براي خواندن رشته

دوديت خواندن كاربر، و رسيدن به ي كد صفر، رسيدن به پايان خط، رسيدن به مح شود كه عبارتند از رسيدن به نويسه مي كـه محـدوديت NSISي هاي ويرايش شـده توانيد نسخه در صورت تمايل مي . NSISها در بايتي رشته 1024محدوديت

پذيرد كه عبارتنـد سه پارامتر مي FileReadدستور . دانلود كنيد nsis.sf.netها بيشتر باشد را از سايت بايتي آن 1024ي رشته، و در صورت تمايل مقداري عددي بـراي محـدود كـردن فايل باز شده، متغير خروجي براي ذخيره ي از دستگيره .طول رشته

FileOpen $0 "myFile.txt" r # براي خواندنباز آردن فايل متني FileRead $0 $1 #خواندن رشته از ابتداي فايل و ذخيره در متغير DetailPrint $1 # انده شده در ليست عمليّاتي خو رشتهنوشتن FileRead $0 $1 100 # ي فايل بايت از ادامه١٠٠ بيشينهخواندن DetailPrint $1 # ي خوانده شده در ليست عمليّات رشتهنوشتن FileClose $0 #بستن فايل باز شده

FileReadByte - ي اين دستور خواندن يك بايت از فايل باز شده با دستور وظيفهFileOpen بايت خوانده شده . است

گر محلّ فايل به انتهاي آن برسد و ايـن دسـتور قـادر بـه اشاره چنانچه. شود به صورت عددي در متغير ارسالي ذخيره مي .شود خواندن مقداري نباشد، مقدار بازگشتي خالي خواهد بود و پرچم خطا روشن مي

FileReadByte $0 $1 # ي از فايل باز شدهخواندن يك بايت به صورت عدد FileReadByte $0 $2 #خواندن بايت بعدي از فايل DetailPrint "$1 $2" #چاپ دو عدد خوانده شده در ليست عمليّات نصب

FileSeek - پارامترهاي اين دستور عبارتنـد . كنيم براي تغيير دادن محلّ فعلي در فايل باز شده از اين دستور استفاده مي

دو پـارامتر آخـر اختيـاري . پرش، و متغيري براي بازگرداندن محـلّ فعلـي فايـل ي گونهايل، محلّ پرش، ي ف از دستگيره محلّ SETدر حالت . است SET» پرش ي گونه«فرض براي پارامتر حالت پيش .ها استفاده نكنيد توانيد از آن هستند و مي

كنيم تـا استفاده مي CURپرش به صورت مرتبط از مقدار براي . شود جديد وابسته به ابتداي فايل و محلّ پرش تعيين مي اسـتفاده ENDي انتهـايي فايـل از مقـدار پرش متناسب با محلّ فعلي انجام شود و در نهايت براي پرش متناسب با نقطه

.كنيم مي

http://egza.wordpress.com/

Page 32: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

31ي صفحه........................................................................................................................................NSISآموزش

FileSeek $0 100 # از ابتداي فايل١٠٠پرش به بايت FileSeek $0 100 SET # تداي فايل از اب١٠٠پرش به بايت FileSeek $0 +2 CUR #پرش به دو بايت جلوتر منتاسب با محلّ فعلي FileSeek $0 -3 CUR # تر متناسب با محلّ فعلي پرش به سه بايت عقب FileSeek $0 -4 END #پرش به چهار بايت قبل از انتهاي فايل FileSeek $0 +5 CUR $1 # در متغيّري محل جديد پرش به پنج بايت جلوتر و ذخيره

FileWrite - دو پـارامتر مـورد نيـاز بـراي . دهـد ي حرفي در فايل باز شده، اين دستور ما را ياري مي براي نوشتن رشته

در حين نوشتن خطايي رخ دهد پرچم خطا روشـن چنانچه. ي مورد نظر هستند ي فايل و رشته اجراي اين دستور دستگيره .خواهد شد

ClearErrors # خطا براي جلوگيري از اشتباهحذف پرچمFileOpen $0 "$INSTDIR\File.txt" w #باز آردن فايل جديد براي نوشتن IfErrors Error #پرش به پايان در صورت رخداد خطا FileWrite $0 "Hello NSIS.$\n" # ي حرفي و رفتن به خط بعد نوشتن رشته FileClose $0 #بستن فايل باز شده Error:

FileWriteByte - ،دو پارامتر اجباري آن عبارتند . شود از اين دستور استفاده مي براي نوشتن يك بايت در فايل باز شده

.ي حاوي عدد بايت مورد نظر ي فايل باز شده و رشته از دستگيرهFileWriteByte $0 "13" # در فايل١٣ي ي شماره نوشتن نويسهFileWriteByte $0 65 #(A) در فايل۶۵ي ي شماره تن نويسهنوش

FindFirst - ها از سه دستور براي جستجو كردن يك فايل يا گروهي از فايلFindFirst ،FindNext و ،FindClose

، )خروجـي (ي جـستجو را با پارامترهاي دستگيره FindFirstقالب جستجو جهت شروع جستجو و تعيين . شود استفاده مي فايلي با مشخّصات مورد نظر يافـت نـشود، چنانچه .كنيم فراخواني مي ) ورودي(و قالب جستجو ، )خروجي( نتيجه نخستين

.واهد شد و پرچم خطا روشن خگيرند ميدو متغير ارسالي مقدار خالي FindFirst $0 $1 "$SYSDIR\*.dll" # ي ها در شاخه جستجوي گروهي از فايل # نامي جستجو و ي دستگيره و ذخيره سيستم، # فايل در متغيّرهاي ارسالينخستين

. خواهد بودdll.ي نام نخستين فايل پيدا شده با پسوند نگهدارنده1$ي جستجو و حاوي دستگيره0$با اجراي مثال بالا،

FindNext - هاي بعـدي از نخستين فايل، براي جستجوي فايلپس از پيدا شدنFindNext ايـن . كنـيم اسـتفاده مـي .كند ي جستجو و خروجيِ نام فايل را دريافت مي تور دو پارامتر وروديِ دستگيرهدس

FindNext $0 $1 #جستوي فايل بعدي داراي شرايط مورد نظر

FindClose - پس از پايان يافتن فرآيند جستجو و به دست آمدن نتايج مورد نظر، با فراخواني اين دستور جستجوي بـاز .ها توجه كنيد ي جستجوي گروهي از فايل ادامه به يك مثال كامل از شيوهدر. بنديم شده را مي

http://egza.wordpress.com/

Page 33: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

32ي صفحه........................................................................................................................................NSISآموزش

FindFirst $0 $1 "$SYSDIR\*.ocx" # هاي آامپوننت شروع جستجو براي فايل loop: #تعيين برچسب براي ايجاد حلقه StrCmp $1 "" done #پرش به پايان در صورت پيدا نشدن فايل DetailPrint $1 # پ نام فايل در ليست عمليّاتچا FindNext $0 $1 #جستجوي دوباره براي يافتن فايل بعدي Goto loop #پرش به ابتداي حلقه done: #تعيين برچسب براي پايان حلقه FindClose $0 #بستن جستجوي باز شده پس از پايان جستجو

)Uninstall(حذف -2-10

دسـتورات . ها تـشكيل يافتـه اسـت ي سراسري، توابع، و بخش پهنه از سه NSISديد فايل اسكريپت همان گونه كه مشاهده كر تعريـف ي گونـه ها كه بر اساس به غير از توابع و بخش . تواند در ميان همين دستورات قرار بگيرند مربوط به حذف برنامه نيز مي

سراسري مورد استفاده قرار بگيرند هم حذف و هم ي پهنهفقط در بخش نصب يا حذف قابل دسترسي هستند، دستوراتي كه در .دهند نصب را تحت تأثير قرار مي

.تواند قرار بگيرد ترتيب استفاده از دستورات نصب و حذف تأثيري در خروجي ندارد و هر دستور در هر مكاني مي

رتيب صفحات نصب را بر عهده داشـت، بـا ي تعيين ت كه وظيفه Pageهنگامي كه در مورد صفحات گفته شد، علاوه بر دستور

كند و ترتيب نمايش صفحات حذف را مشخصّ عمل مي Page نيز آشنا شديم كه درست همانند دستور UninstPageدستور .نمايد مي

فراخـواني براي اين گونه توابع الزامي است و .unدر مورد توابع نيز آموختيم كه براي ايجاد توابع زمان حذف قرار دادن پيشوند . حالت عكسگونه پذير نيست و همين هاي حذف امكان توابع زمان نصب توسط بخش

تعريف شده باشـند، بـه Uninstall داشته باشند يا با نام .unهايي كه پيشوند ي حذف فراخواني شود، بخش هنگامي كه برنامه

.ترتيب قرارگيري در فايل اسكريپت اجرا خواهند شد

در هنگام نصب براي انجام اين كار بايد . شوند توابع حذف به تنهايي باعث ايجاد فايل اجرايي حذف برنامه نمي ها و ايجاد بخش ي فايل اجرايي حـذف اسـت، اين دستور يك پارامتر كه مسير و نام براي ذخيره . را فراخواني كنيد WriteUninstallerدستور

يـك كـم دسـت كنـد كـه پذير است و در صورتي عمل مـي توابع نصب امكان ها و فراخواني اين دستور فقط در بخش . پذيرد مي .توانيد اين دستور را چند بار صدا بزنيد براي ايجاد چند فايل اجرايي حذف مي. بخش با شرايط ياد شده براي حذف موجود باشد

WriteUninstaller "$INSTDIR\UnInstall.exe" #ايجاد فايل اجرايي حذف برنامه

عامل ويندوز پاك كـردن در سيستم. گام در هنگام حذف برنامه، پاك كردن فايل اجرايي حذف استنخستينكنيد كه فراموش ن يك كپـي NSISكنيد، ميبراي رفع اين مشكل، هنگامي كه فايل حذف برنامه را اجرا . ممكن نيست ، در حال اجرا فايل اجراييِ

اجرايـي توانيـد فايـل بنابراين بدون ايجاد مشكل مي . كند كند و آن را اجرا مي كاربر ايجاد مي TEMPي از اين فايل را در شاخه . پاك كنيدDeleteحذف را با دستور

http://egza.wordpress.com/

Page 34: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

33ي صفحه........................................................................................................................................NSISآموزش

Section "Uninstall" #شروع بخش حذف Delete "$INSTDIR\Uninstall.exe" #پاك آردن فايل اجرايي حذف بدون مشكل SectionEnd #پايان بخش حذف

. ي حذف در اختيار داشـته باشـد شود، بنابراين كاربر بايد راهي ساده براي اجراي برنامه خواست كاربر انجام مي حذف برنامه به در

اين كار را انجام دهيـد و همـين ،ي حذف برنامه براي و ايجاد يك فايل ميانبر CreateShortcutتوانيد با فراخواني دستور مي ويندوز را براي كـاربر فـراهم Control Panel راهحذف برنامه از امكان يندوز، هاي مربوط در رجيستري و با ايجاد بخشگونه .نماييد

OutFile "UnInst Test.exe" # اجباري-نام فايل خروجي نصب InstallDir "$PROGRAMFILES\UninstTest" # فرض نصب برنامه تعيين مسير پيش Page directory #تعيين ترتيب صفحات نصب Page instfiles # UninstPage uninstconfirm #تعيين ترتيب صفحات حذف UninstPage instfiles # Name "UnInst Test" #نام بسته Section "Install" # افزار بخش مربوط به نصب نرم SetOutPath "$INSTDIR" # ي برنامه ايجاد شاخه WriteUninstaller "$INSTDIR\Uninst.exe" #ايجاد فايل اجرايي حذف برنامه # Start Menu برنامه در ي ايجاد شاخه CreateDirectory "$STARTMENU\Programs\myApp" ايجاد فايل ميانبر براي حذف برنامه#CreateShortcut "$STARTMENU\PROGRAMS\myApp\Uninstall.lnk" \ "$INSTDIR\Uninst.exe" # در رجيستري براي حذفنوشتن نام برنامه WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\myApp" \ "DisplayName" "myApp 1.2(Remove Only)" نوشتن فرمان لازم براي حذف برنامه در رجيستري#WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\myApp" \ "UninstallString" "$INSTDIR\Uninst.exe" SectionEnd #پايان بخش نصب Section "Uninstall" #بخش حذف برنامه پاك آردن فايل اجرايي حذف از ديسك سخت#Delete "$INSTDIR\UnInst.exe" # فايل ميانبر حذفپاك آردنDelete "$STARTMENU\Programs\myApp\Uninstall.lnk" # Start Menu ي برنامه در حذف شاخه Rmdir "$STARTMENU\Programs\myApp" # ي حذف برنامه در رجيستري ويندوز شاخه پاك آردن DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\myApp" SectionEnd #پايان بخش حذف

http://egza.wordpress.com/

Page 35: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

34ي صفحه........................................................................................................................................NSISآموزش

Start Menuذف ايجاد شده در فايل ميانبر حتصوير

Add or Remove Programsعنوان ايجاد شده در تصوير

Control Panelي حذف پس از اجراي فايل ميانبر يا عنوان موجود در تصوير پنجره

http://egza.wordpress.com/

Page 36: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

35ي صفحه........................................................................................................................................NSISآموزش

CallBackفهرست توابع : الفپيوست

در زمان نصبCallBack توابع -1-الف

onGUIInit. -1-1-الفي نـصب بعدي نمايش پنجره گاماند و اري شده ز منابع لازم براي اجراي نصاب بارگ ي همهشود كه ماني فراخواني مي اين تابع ز

.تواند ايجاد تغييرات در ظاهر برنامه باشد ي اين تابع مي استفاده. است!include "WinMessages.nsh" Function .onGUIInit است آد مربوط به شيء معرّفي نصّاب١٠٢٨ # GetDlgItem $R0 $HWNDPARENT 1028 ايجاد فونت جديد در حافظه # CreateFont $R1 "Tahoma" 8 500 تغيير فونت شيء مورد نظر # SendMessage $R0 ${WM_SETFONT} $R1 0 تغيير رنگ زمينه به سفيد و رنگ متن به قرمز # SetCtlColors $R0 FFFFFF FF0000 FunctionEnd

onInit. -2-1-فال

با استفاده از ايـن تـابع و . مراحل لازم براي شروع نصب به پايان رسيده است ي همهشود كه تقريباً اين تابع زماني فراخواني مي .توان از اجراي نصب جلوگيري كرد در آن ميAbortاجراي دستور

Function .onInit خواندن يك رشته از داخل فايل ; ReadINIStr $INSTDIR $WINDIR\wincmd.ini Configuration InstallDir StrCmp $INSTDIR "" 0 NoAbort MessageBox MB_OK " ي مورد نظر روي سيستم شما يافت نشد برنامه " Abort ; خروج از نصّاب NoAbort: ; ي نصب ليبل براي پرش و ادامه FunctionEnd

http://egza.wordpress.com/

Page 37: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

36ي صفحه........................................................................................................................................NSISآموزش

.ي نصب خارج شد براي اجراي نصب را بررسي كرد و در صورت لزوم از برنامهتوان موارد لازم با استفاده از اين تابع مي

onInstFailed. -3-1-الف . كليك كندCancelزمان فراخواني اين تابع هنگامي است كه كاربر پس از ايجاد يك خطاي غير قابل اصلاح بر روي

onInstSuccess. -4-1-الف

ي نصب شده، تواند پرسش براي اجراي برنامه ي آن مي موارد استفاده . شود بع فراخواني مي آمير نصب اين تا پس از پايان موفّقيت .نمايش راهنماي برنامه باشد و يا سپاسگزاري از كاربر براي نصب برنامه

onGUIEnd . -5-1-الف

. توسط كاربر استفاده شودتواند براي آزادسازي منابع اشغال شده ي نصب است و مي شدن پنجره اجراي اين تابع پس از بسته

onMouseOverSection. -6-1-الف

ي اين تابع عوض مور استفاده . شود نصب وارد كند، اين تابع فراخواني مي هاي هنگامي كه كاربر نشانگر ماوس رو بر روي بخش .نيد مراجعه كNSISهاي موجود در ي روش انجام اين كار به مثال براي مشاهده. كردن راهنماي بخش است

onRebootFailed. -7-1-الف نتواند ايـن كـار NSISاندازي مجدد سيستم باشد و كه از نام اين تابع آشكار است، هنگامي كه به هر دليل نياز به راه گونه همان

.كند را انجام دهد اين تابع را فراخواني مي

onSelChange. -8-1-الف .شود نصب را تغيير دهد اين تابع صدا زده ميي گونه يا نصب ايجاد كند،هاي زماني كه كاربر تغييراتي در انتخاب بخش

onUserAbort. -9-1-الف

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

onVerifyInstDir. -10-1-الفي ي نصب در شاخه توانيد اجازه با فراخواني اين تابع در اين مواقع مي . صب را تغيير دهد ي ن تواند شاخه در هنگام نصب كاربر مي

.مورد نظر را به وي بدهيد يا از نصب جلوگيري نماييد : در تابع ذكر شده استفاده كنيدAbortي انتخاب شده كافيست از دستور براي جلوگيري از نصب برنامه در شاخه

Function .onVerifyInstDir IfFileExists "$INSTDIR\Winamp.exe" PathGood Abort ; ي نصب نده ي وينمپ نبود، اجازه ي مقصد شاخه چنانچه شاخه PathGood: FunctionEnd

http://egza.wordpress.com/

Page 38: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

37ي صفحه........................................................................................................................................NSISآموزش

UnInstall در زمان CallBack توابع -2-الف

un.onGUIInit -1-2-الف .به تابع مشابه در زمان نصب مراجعه كنيد. ر برنامه را گنجاندتوان دستورات لازم براي ايجاد تغييرات در ظاه در اين تابع مي

un.onInit -2-2-الف

توان حذف برنامه را لغو مي گامدر اين . پذيرد صورت مي UnInstallerفراخواني اين تابع پس از بارگزاري منابع مورد نياز براي گـام ي مقصد كه برنامه در آن نصب شده را نيـز در ايـن شاخهتوان همچنين مي . قرار داد گامكرد يا پرسش براي لغو را در اين

.بررسي و اصلاح كرد

un.onUninstFailed -3-2-الف .شود كه اشكالي در عمليات رخ دهد و كاربر خروج از برنامه را انتخاب كند تابع مورد نظر هنگامي صدا زده مي

un.onUninstSuccess -4-2-الف

.شود پيش از خروج اين تابع فراخواني ميي از روي سيستم حذف شود و زماني كه برنامه به درست

un.onGUIEnd-5-2-الف

. براي انجام كارهاي لازم جهت پاكسازي حافظه و حذف منابع استفاده شدهNSISي فراخواني پس از بسته شدن پنجره

un.onRebootFailed -6-2-الفهـايي در اجـراي دسـتورات محـدوديت . زي مجدد سيستم قابـل انجـام نبـوده اسـت اندا دهد كه راه فراخواني اين تابع نشان مي

به اين دليل كه ممكن اسـت نيمـي از . ها وجود دارد ها، و استفاده از پلاگين ، پردازش فايلUnInstallerرجيستري، ايجاد فايل . بسته شده باشندRestartمنابع سيستم پيش از لغو

un.onUserAbort -7-2-الف

.شود غو عمليات برنامه توسط كاربر باعث اجراي دستورات اين تابع ميل

http://egza.wordpress.com/

Page 39: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

38ي صفحه........................................................................................................................................NSISآموزش

بهينه سازي: بپيوست كاهش بيش از پيش حجم-1-ب

سازي مناسب نياز به دانش انتخاب فشرده . ساز جاري است نادرست فشرده انتخاب ،ترين عامل افزايش حجم كلّي مهم ي به گونه . هاسـت سازي بر روي انواع مختلف فايـل حالات مختلف فشرده همگيب تجربه، آزمايش بهترين روش براي كس . و تجربه دارد

ــوان ــد و عنـــ ــت كنيـــ ــك راســـ ــود كليـــ ــكريپت خـــ ــل اســـ ــار روي فايـــ ــن كـــ ــام ايـــ ــراي انجـــ بـــ»Comile NSIS Script (Choose Compressor) «رابط كامپايلر . را انتخاب كنيدNSISي گونـه ز شما شود و ا ظاهر مي

.پرسد ساز را مي فشرده

بـا انجـام ايـن كـار اسـكريپت شـما بـا انـواع . را انتخـاب كنيـد Best Compressorي آخر يعني در ليست مورد نظر گزينه

.ترين نصب به عنوان خروجي تعيين خواهد شد حجم شود و كم سازهاي موجود فشرده مي فشرده

هاي موجود در بسته را با هم يكـي فايلي همهن معني كه به اي. است) Solid(تكّه سازي يك فشردهNSISهاي يكي از قابليت ها بـر روي ديـسك فايل ي همهي انجام اين كار نياز به فضاي خالي به اندازه . كند كند و سپس فايل مورد نظر را فشرده مي مي

ي موجـود پـيش از فايـل ها فايل ي همهبه علاوه با انجام اين كار امكان استخراج مستقيم يك فايل وجود ندارد و . سخت است .مورد نظر بايد پردازش شوند

بـا محتـواي يهـا به اين صورت كـه فايـل . كنيم استفاده مي File دستور x/سازي يك تكّه از پارامتر براي بهينه كردن فشرده .سازي در بيشترين حد خود قرار بگيرد دهيم تا فشرده مشابه را در امتداد هم قرار مي

.شود مي... ، وexe ،txt ،ocx ،bmp ،dll ،iniي ما موجود است كه شامل ها در بسته از فايليا فرض كنيد مجموعه .كنيم به شكل زير استفاده ميFileدر حالت ساده ما از دستور

File /r "myApp\*.*"

.كنيم ها در بسته به صورت زير عمل مي براي مرتبّ كردن فايلFile /r "myApp\*.exe" File /r "myApp\*.dll" File /r "myApp\*.ocx" File /r "myApp\*.bmp" File /r "myApp\*.txt" File /r "myApp\*.ini" File /r "myApp\*.*" /x "*.exe" /x "*.dll" /x "*.ocx" /x "*.bmp" /x "*.txt"\ /x "*.ini" # ها ي فايل فشرده آردن بقيه

http://egza.wordpress.com/

Page 40: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

39ي صفحه........................................................................................................................................NSISآموزش

هـا فايلي همههايي با محتواي مشابه در امتداد هم قرار گرفتند و در انتها نيز فايلكنيد همان گونه كه در مثال بالا مشاهده مي .هايي كه قبلا فشرده شده بودند در بسته گنجانده شدند به جز فايل

.شود هاي مورد نظر از ليست فشرده سازي مي باعث حذف فايلx/ پارامتر . ارسال كنيدSetCompressor را به دستور SOLID/اً بايد پارامتر ي تكنيك فوق حتم فراموش نكنيد كه براي عملكرد بهينه

SetCompressor /SOLID lzma

توانـد شـامل يك آيكون مي . توان به آيكون مورد استفاده اشاره كرد شود مي از ديگر عواملي كه باعث كاهش حجم خروجي مي

.شامل تصاوير مورد نياز خود استفاده كنيدهايي با حجم كمتر و فقط سعي كنيد از آيكون. چندين تصوير باشد

را rtf قصد استفاده از چنانچهاستفاده كنيد و ) txtبا پسوند (براي كاهش حجم فايل مجوز خود بهتر است از فايل متني معمولي از فايل مـشابه در ويندوز استفاده كنيد زيرا خروجي آن چندين برابر كوچكتر WordPadي داريد، براي ايجاد آن فقط از برنامه

. استOfficeي مجموعهWordاي مانند برنامه

ايـد حتمـا بـا كمـك يـك ويرايـشگر تـصويري تعـداد كنيد و تصاوير آن را تغييـر داده استفاده مي NSISچنانچه از رابط مدرن رنگ ذخيره كنيد تا هنگام 256 بيتي يا 8 مورد استفاده در تصوير را تا حد ممكن كاهش دهيد و خروجي را به صورت يها رنگ

.سازي به بهترين نتايج دست پيدا كنيد فشرده

. مجدد فشرده شوند، كاهش حجم نخواهند داشت و حتّي ممكن است حجمشان افزايش پيدا كنـد چنانچهشده هاي فشرده فايلهـا را توانيـد آن فايـل فـشرده مـي در صورت نياز بـه . هاي فشرده در بسته خودداري كنيد بنابراين سعي كنيد از قرار دادن فايل

).سازي و بدون فشردهStoreالبتّه در حالت (سازي مجدد كنيد فشرده . درصد كاهش داد20 را تا Nortonياب توان حجم تعاريف ويروس با انجام همين تكنيك ساده مي

هـا نيـاز بـه كدگـذاري فايـل چنانچـه اين بنابر. شوند هاي كدگذاري شده نسبت به فايل معمول خود بسيار كمتر فشرده مي فايل

فـشرده كنيـد و سـپس اقـدام بـه كدگـذاري و lzmaها را با كمك يك ابزار جـانبي ماننـد ها را داريد، ابتدا آن باكمك پلاگين .قراردادن آن در بسته نماييد

هـاي يـن دسـتور پـيش از فايـل فراخواني ا . شود توصيه مي off با پارامتر SetCompressدر چنين شرايطي استفاده از دستور .تكّه عملكردي ندارد سازي يك اين دستور هنگام استفاده از فشرده. شود ها مي سازي آن فشرده باعث عدم فشرده

SetCompress off File "myFile.rar" SetCompress auto

افزايش سرعت فشرده سازي-2-ب

بنابراين انتخاب با شماست كه تا چه اندازه كفـه را بـه سـمت هـر .ي عكس دارند سازي با يكديگر رابطه سرعت و قدرت فشرده سازي از اهميت اينترنت، حجم خروجي مهمترين عامل است و سرعت فشرده راهبراي مثال در انتقال فايل از . يك متمايل كنيد

.كمتري برخوردار استبـه . گـذارد در اختيار شما مـي zlibيشترين سرعت را ب. با يكديگر متفاوت است NSISسازهاي سازيِ انواع فشرده سرعت فشرده

.كند عمل ميlzma و bzip2هاي فشرده بهتر از در مورد فايلzlibعلاوه .گردد سازي مي نيز باعث افزايش سرعت فشردهSetCompress در مقابل دستور SOLID/استفاده نكردن از پارامتر

http://egza.wordpress.com/

Page 41: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

40ي صفحه........................................................................................................................................NSISآموزش

شـود ها فقط يك بار مـي ي آن ها و ذخيره عث پيدا كردن قطعات مشابه در فايل كه با NSISهاي منحصر به فرد يكي از قابليت DataBlockOptimize نام دارد . د سـرعت را فايلسازي زيادي در هنگام فشرده خاموش كردن اين بررسي تا حدهـاي متعـد

.نيدي سراسري از دستور زير استفاده ك پهنهبراي خاموش كردن اين گزينه در . دهد افزايش ميSetDataBlockOptimize off

NSIS ها كمتر از حجـم معمـول باشـد، ي آن شده حجم فشرده چنانچهكند و ها را فشرده مي فايل ي همهفرض پيش ي گونه به

كـه روش اسـتفاده از آن را در بخـش قبـل مـشاهده SetCompressبا كمك دسـتور . كند را در بسته ذخيره مي فايل فشرده .هاي فشرده جلوگيري كرد و سرعت را تا حد زيادي افزايش داد از فشرده كردن مجدد فايلتوان كرديد، مي

حجـم ديكـشنري . شـود ساز مي باعث افزايش سرعت اين فشرده lzmaساز استفاده از حجم ديكشنري كوچكتر در مورد فشرده

به برابر سازي را كاهش داده و در ي قدرت فشرده توانيد اندك با كم كردن اين مقدار مي . مگابايت است lzma 8فرض براي پيش .سرعت بيفزاييد

هـاي سازي سعي كنيد تا حد امكـان برنامـه در هنگام فشرده . ي مستقيم با قدرت پردازشگر شما دارد سازي رابطه سرعت فشرده كنند و از اجزاي حيـاتي مصرف ميتوانيد فرآيندهايي كه پردازش بالايي را ويندوز ميTask Mangerبا كمك . ديگر را ببنديد

.ويندوز نيستند را شناسايي كنيد وببنديد

. توانند در كاهش سرعت كامپايـل تـأثير گـذار باشـد هاي ورودي و خروجي نيز مي درست همانند سرعت پردازنده، سرعت درگاه .كنند را ببنديد ها استفاده مي سازي و درگاه فضاهاي ذخيرههايي كه از بنابراين سعي كنيد در هنگام كامپايل برنامه

پس فراموش نكنيد كه پيش از شروع كامپايـل حتمـاً . سازي را تا چند برابر كاهش دهد تواند سرعت فشرده ياب مي يك ويروس

در چنـين حـالتي . يك فايروال نا مناسب هم ممكن است تا حدي در كاهش سرعت تأثيرگـذار باشـد . ياب خود را ببنديد ويروس . خود را قطع كنيد و سپس فايروال را ببنديد و فرآيند كامپايل را آغاز كنيداينترنت

افزايش سرعت استخراج-3-ب

نـشده را هـاي فـشرده بنابراين سعي كنيد فقط فايل . سازي كمتر باشد سرعت استخراج افزايش خواهد يافت هر چه مقدار فشرده ).ي قبلي شرح آن گذشتها كه در بخشSetCompressبا كمك دستور (فشرده كنيد

حجـم نـسبت برابـر، گـذارد و در سازي و استخراج در اختيـار شـما مـي بيشترين سرعت را در فشرده zlibساز استفاده از فشرده

.خروجي به ورودي بيشتر خواهد بود

ها پايين رعت انتقال داده س چنانچه. عوامل بالا هنگامي اثر بخش خواهند بود كه فرآيند استخراج از محلّي پر سرعت انجام شود سازي تاثير مثبت بـر سـرعت خواهـد داشـت زيـرا حجـم ، بالاتر بردن قدرت فشرده )ي كم سرعت براي مثال يك شبكه (است .كند هايي كه بايد از مسير آهسته انتقال يابد، كاهش پيدا مي داده

هايي كه قبلاً بر روي مقصد موجود هـستند جلـوگيري دليل فايل توانيد از استخراج بي مي Overwriteبا خاموش كردن پارامتر

.كنيد و در نتيجه سرعت استخراج را در حالت خاص افزايش دهيد

http://egza.wordpress.com/

Page 42: NSIS ﻲﺴﻳﻮﻧﺖﭙﻳﺮﻜﺳا شزﻮﻣآ · ﻲـﮕﻤﻫ لﺎـﺣ ﻦﻳا ﺎﺑ ﻲﻟو هﺪﺸﻧ ﻲﻧﺎﺳرزور ﻪﺑ ﻪﻛ ﺖﺳا ﻲﺗ ﺪﻣ ﻪﻣﺎﻧﺮﺑ

41ي صفحه........................................................................................................................................NSISآموزش

:پذيرد اين دستور پارامترهاي مختلفي را مي. كنيم استفاده ميSetOverwriteبراي انجام اين كار از دستور on -ها فايلي همه جايگزيني -فرض حالت پيش. off -جايگزيني در صورت وجود فايل در مقصد عدم . try -تلاش براي جايگزيني و عدم نمايش پيام در صورت بروز خطا . ifnewer -بررسي تاريخ دو فايل و جايگزيني در صورت جديدتر بودن . ifdiff -جايگزيني در صورت تفاوت داشتن دو فايل .

SetOverwrite off File "myDllFile.dll" SetOverwrite ifdiff # ي دستورات ادامه

نصب را كه بـراي اطمينـان از نخستينتوانيد بررسي مي CRCCheck نيز گفته شد، با استفاده از دستور تر پيشهمان گونه كه

مراجعه كنيد9-8-2براي توضيحات بيشتر به بخش . شود، خاموش كنيد درستي بسته انجام مي

http://egza.wordpress.com/