日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NSIS安装制作程序

發布時間:2025/3/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NSIS安装制作程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

NSIS安裝制作程序

http://blog.csdn.net/byxdaz/article/details/4551356
分類:?開源軟件?技術資料2009-09-14 14:43?677人閱讀?評論(0)?收藏?舉報

NSIS(Nullsoft Scriptable Install System)是一個開源的?Windows?系統下安裝程序制作程序。它提供了安裝、卸載、系統設置、文件解壓縮等功能。這如其名字所指出的那樣,NSIS?是通過它的腳本語言來描述安裝程序的行為和邏輯的。NSIS?的腳本語言和通常的編程語言有類似的結構和語法,但它是為安裝程序這類應用所設計的。

 ??1. NSIS的主要特點:

  —開銷小,一個完整功能的安裝程序僅需要?34k?的額外開銷。

  —支持大多數?Windows?平臺,包括:Windows 9.x,Windows NT,Windows 2000,Windows XP,Windows 2003

  —支持三大壓縮算法:Zlig,BZips,?LZMA

  —支持腳本

  —支持多語言

  —支持安裝界面定制

  —提供可擴展的插件接口

  —支持網絡安裝、補丁

  —支持無人值守的安裝模式

  —此外,NSIS的license允許任何用途免費使用。

  2.?開發一個NSIS的安裝程序通常有以下幾步:

  —確定安裝的功能和界面元素

  —編寫?NSIS?腳本

  —使用?NSIS?提供的?makensis?或者?makensisw?程序,將步驟?2?編寫的腳本編譯成可執行的安裝程序

  —調試安裝程序,如果有問題退到第二步重復

  —隨著?NSIS?的流行,有一些第三方的?NSIS?腳本開發環境出現了,如?HMNISEdit,Venis IX。

  前者是完全開源的,后者僅對個人和非商業用途免費。在這些集成開發環境下,步驟2,3可以方便的組合在一起。

  3. NSIS?腳本的結構

  3.1 NSIS?腳本(下稱?nsi?腳本)主要包含安裝程序屬性、頁面、區段、函數。

  屬性用來定義安裝程序的行為和界面風格,這些屬性大部分是編譯時刻屬性,即不能在運行時刻改變。

  頁面是指安裝程序的向導頁面。

  示例:

  Page license

  Page components

  Page directory

  Page instfiles

  UninstPage uninstConfirm

  UninstPage instfiles

  3.2?區段是對應某種安裝/卸載選項的處理邏輯,該段代碼僅當用戶選擇相應的選項才被執行。

  卸載程序的區段名用"un."作 為前綴。

  示例:

  Section "Installer Section"

  SectionEnd

  Section "un.Uninstaller Section"

  SectionEnd

  3.3?在區段中可以使用很多指令用來完成諸如解壓縮文件、讀寫注冊表、創建目錄、創建快捷方式等任務。

  但最常用的指令是?SetOutPath?和?File。前者用于指定目的位置,后者用于指定文件。

  示例:

  Section "My Program"

  SetOutPath $INSTDIR

  File "My Program.exe"

  File "Readme.txt"

  SectionEnd

  3.4?區段名的修飾符“/o”表示該區段默認不選上,“-”表示隱藏區段(匿名區段也是隱藏區段),“!”表示需要粗體顯示的區段。

  SectionIn?表示該區段和安裝類型之間的關系:

  SectionIn insttype_index [RO]

  RO?修飾符表示不可修改。

  3.5?子區段用于包含多個區段:

  SubSection [/e] Caption [subsection_name index output]

  修飾符“/e”用于該子區段的所有區段是否默認展開。

  3.6?函數包含了模塊化的安裝邏輯,在?nsi?腳本中函數分為兩種:用戶自定義函數和回調函數。

  用戶自定義函數僅當是?Call?指令調用時才被執行。

  如果函數體中沒有abort語句,則安裝程序執行完了用戶自定義函數,繼續運行?Call?語句和指令。

  用戶自定義函數的語法如下:

  Function <函數名>

  # some commands

  FunctionEnd

  函數的調用則使用以下語法:

  Call <函數名>

  可見無論是函數的定義還是函數的調用都沒有參數傳遞。

  通常?nsi?的參數傳遞是通過堆棧操作?Pop,Push?和?20?個寄存器變量?$0~$9、$R0~$R9?進行的。

  也可以通過全局變量完成參數傳遞。

  如:

  Var input ;

  Var output ;

  Section bla

  DeteailPrint "input is $input$/n"

  Call square

  DeteailPrint "square of $input is $output$/n"

  SectionEnd

  Function square

  output = input^2

  FunctionEnd

  回調函數則是由在特定的時間點觸發的程序段。常用的回調函數如?.onInit:

  Function .onInit

  MessageBox MB_YESNO "This will install My Program. Do you wish to continue?" IDYES gogogo

  Abort

  gogogo:

  FunctionEnd

  NSIS?對于安裝邏輯定義以下回調函數:

  .onGUIInit

  .onInit

  .onInstFailed

  .onInstSuccess

  . onGUIEnd

  .onMouseOverSection

  .onRebootFailed

  .onSelChange

  .onUserAbort

  .onVerifyInstDir

  NSIS?對于卸載邏輯定義以下回調函數:

  un.onGUIInit

  un.onInit

  un.onUninstFailed

  un.onUninstSuccess

  un.onGUIEnd

  un.onRebootFailed

  un.onUserAbort

  4. nsi?腳本的變量定義

  nsi?腳本的變量定義用?Var?關鍵字,后跟變量名,變量是全局的并且是大小寫敏感的。變量引用時需要加上前綴“$”。

  除了用戶自定義的變量外,nsi?腳本中與定義寄存器變量?$0~$9、$R0~$R9?用于參數傳遞,以及系統變量用于特定用途。

  這些變量主要有:

  $INSTDIR,$OUTDIR,$CMDLINE,$LANGUAGE?這些變量都是可寫的。

  $PROGRAMFILES,$COMMONFILES,$DESKTOP,$EXEDIR,$WINDIR,$SYSDIR,$ TEMP,$STARTMENU

  $SMPROGRAMS,$SMSTARTUP,$QUICKLAUNCH,$DOCUMENTS,$SENDTO,$ RECENT,$FAVORITES

  $MUSIC,$PICTURES,$VIDEOS,$NETHOOD,$FONTS,$TEMPLATES,$ APPDATA,$PRINTHOOD

  $INTERNET_CACHE,$COOKIES,$HISTORY,$PROFILE,$ ADMINTOOLS,$RESOURCES

  $RESOURCES_LOCALIZED,$CDBURN_AREA,$HWNDPARENT,$PLUGINSDIR。

  nsi?腳本中可用于調試的系統函數有?MessageBoxes、DetailPrint、Dumpstate。

  5. nsi腳本的編譯器指令

  nsi?腳本的編譯器指令主要指僅在編譯時刻執行的命令。

  這些命令主要用來包含文件、條件化編譯、定義常量、定義宏等。

  定義常量和宏是編譯器指令最主要應用。

  定義常量的示例:

  !define VERSION "1.0.3"

  Name "My Program $"

  OutFile "My Program Installer - $.exe"

  定義宏的示例:

  !macro MyFunc UN

  Function $MyFunc

  Call $DoRegStuff

  ReadRegStr HKLM Software/MyProgram key

  DetailPrint

  FunctionEnd

  6. Modern UI

  Modern UI?是感觀上模仿最新的?Windows?系統的界面風格,它由歡迎頁面、結束頁面和其他向導頁面構成。

  7.?插件

  nsi?支持插件,通過插件可以方便的擴展?NSIS?安裝程序的功能。

  NSIS?插件是用?C++、Delphi?等語言編寫的?dll,在?nsi?腳本中調用?nsi?中的函數使用如下語法:

  DLLName::FunctionName "參數1" "參數2" "參數3"

  示例1:

  nsExec::ExecToLog '"$/makensis.exe" /CMDHELP'

  執行makensis.exe命令,顯示該命令用法。

  示例2:

  InstallOptions::dialog "$PLUGINSDIR/test.ini"

  顯示對話框

  示例3:

  NSISdl::download http://download.nullsoft.com/winamp/client/winamp291_lite.exe $R0

  下載文件

  8. NSIS?搜索插件的策略

  默認情況下?NSIS?在其安裝目錄的子目錄?Plugins?中搜索插件,用戶可以使用?!addplugindir?指定增加插件的目錄位置。

  9. nsi?腳本的基本語法

  9.1?注釋

  單行注釋用井號“#”或分號“;”,跨行注釋用可以用“C/C++”中注釋語法。

  9.2?數據類型

  9.2.1?數字

  數字常量可以用十進制、十六進制(0x為前綴)、八進制(0為前綴)表示。

  顏色用類似?HTML?的中?RGB?表示法,但去 井號“#”。

  9.2.2?字符串

  字符串常量可以用引號引用,轉意字符用"$/"作前綴。

  美元符號、常用轉意字符換行、回車、制表符的nsi語法表示分別為:$$,$/n,$/r,$/t

  9.2.3?續行符

  nsi?腳本用行尾的反斜杠“/”表示下一行和當前行邏輯上是同一行。

  9.2.4?默認頭文件

  如果在makensis同目錄下有nsisconf.nsh文件,該文件會被自動包含,除非編譯時指定/NOCONFIG選項。

  9.2.5?標號

  nsi?使用?GOTO?語句和?IfErrors、MessageBox、IfFileExists?及?StrCmp?進行程序控制流表示,標號是這些語句的目標語句。

  標號定義的語法:標號:語句

  標號必須定義在函數和區段中,其作用范圍僅限于定義它的區段或函數。以點號“.”開頭的標號是全局標號。

  9.3?相對跳轉

  nsi?腳本常常使用相對跳轉表示條件分枝,其語法是?[+-][1-9],加號表示從當前位置往前跳轉,減號則表示從當前位置往后跳轉。

  數字表示跳轉的語句條數。

  示例:

  Goto +4

  MessageBox MB_OK "The following message will be skipped"

  Goto +3

  MessageBox MB_OK "You will never ever see this message box"

  Goto -3

  MessageBox MB_OK "Done"

  10.?頁面

  向導頁面是?NSIS?安裝程序中最重要的界面元素,在?nsi?腳本中可以使用?NSIS?內置頁面或者定制界面,通過腳本可以指定頁面的順序、顯示樣子和行為。Page指令用來定義安裝程序中的頁面,UninstPage用來定義,此外PageEx指令提供類是功能,但提供更多選項。頁面的順序和它在nsi腳本中出現的次序一致。

  示例:

  Page license

  Page components

  Page directory

  Page instfiles

  UninstPage uninstConfirm

  UninstPage instfiles

  規定安裝程序首先顯示license頁面,然后顯示components選擇頁面,接著顯示安裝目錄選擇頁面。

  10.1?頁面選項

  不同的頁面有不同的選項:

  License page?有?LicenseText、LicenseData、LicenseForceSelection;

  Components selection?頁面有?ComponentText;

  Directory selection?頁面有?DirText、DirVar (僅能在?PageEx?中使用)、DirVerify;

  Un/Installation log?頁面有?DetailsButtonText、CompletedText;

  Uninstall confirmation?頁面有?DirVar (僅能在?PageEx?中使用)、UninstallText。

  對于內置的?Page,NSIS?支持三個回調函數用于定制界面和驗證,對于自定義頁面?NSIS?支持兩個回調函數。

  Page?指令語法:

  Page license|components|directory|instfiles|uninstConfirm) [pre_function] [show_function] [leave_function]

  或者:

  Page custom [creator_function] [leave_function] [caption]

  示例:

  Page license skipLicense "" stayInLicense

  Page custom customPage "" ": custom page"

  Page instfiles

  Function skipLicense

  MessageBox MB_YESNO "Do you want to skip the license page?" IDNO no

  Abort

  no:

  FunctionEnd

  Function stayInLicense

  MessageBox MB_YESNO "Do you want to stay in the license page?" IDNO no

  Abort

  no:

  FunctionEnd

  Function customPage

  GetTempFileName $R0

  File /oname=$R0 customPage.ini

  InstallOptions::dialog $R0

  Pop $R1

  StrCmp $R1 "cancel" done

  StrCmp $R1 "back" done

  StrCmp $R1 "success" done

  error: MessageBox MB_OK|MB_ICONSTOP "InstallOptions error:$/r$/n$R1"

  done:

  FunctionEnd

  UninstPage?指令語法

  UninstPage custom [creator_function] [leave_function] [caption]

  或

  UninstPage (license|components|directory|instfiles|uninstConfirm) [pre_function] [show_function] [leave_function]

  PageEx?語法

  PageEx?使用嵌套結構,比如:

  PageEx license

  LicenseText "Readme"

  LicenseData readme.rtf

  PageCallbacks licensePre licenseShow licenseLeave

  PageExEnd

  11.?常用的?nsi?指令

  nsi?大致可以分為基本指令、注冊表及?ini?操作指令、通用指令、流程控制指令、文件操作指令、卸載指令、字符串處理指令、多語言支持指令、重啟指令。

  以下是常用的基本指令:

  (1) Delete:

  Delete [/REBOOTOK] file

  (2) Exec:

  Exec command

  (3) ExecShell:

  ExecShell action command [parameters] [SW_SHOWNORMAL | SW_SHOWMAXIMIZED | SW_SHOWMINIMIZED | SW_HIDE]ExecShell "open"?示例"http://nsis.sf.net/"

  ExecWait

  ExecWait command

  示例:

  ExecWait '"$INSTDIR/someprogram.exe"'

  ExecWait '"$INSTDIR/someprogram.exe"'

  DetailPrint "some program returned "

  (4) File:

  File [/nonfatal] [/a] ([/r] [/x file|wildcard [...]] (file|wildcard) [...] | /oname=file.dat infile.dat)

  /r選項用作遞歸模式,/x用于排出文件

  示例:

  File something.exe

  File /a something.exe

  File *.exe

  File /r *.dat

  File /r data

  File /oname=$TEMP/temp.dat somefile.ext

  File /nonfatal "a file that might not exist"

  File /r /x CVS myproject

  File /r /x *.res /x *.obj /x *.pch source

  (5) Rename:

  Rename [/REBOOTOK] source_file dest_file

  (6) RMDir:

  RMDir [/r] [/REBOOTOK] directory_name

?

NSIS發布版本與源代碼下載:http://nsis.sourceforge.net/Download

NSIS安裝包制作教程詳細版:http://download.csdn.net/source/664095

NSIS入門教程:http://blog.163.com/nine_skys/blog/static/293423252007991104695/

總結

以上是生活随笔為你收集整理的NSIS安装制作程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。