青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

大龍的博客

常用鏈接

統計

最新評論

NSIS

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


  開銷小,一個完整功能的安裝程序僅需要34k的額外開銷。 
  支持大多數Windows平臺,包括:Windows 9.x,Windows NT, Windows 2000, Windows XP, Windows 2003 
  支持三大壓縮算法: Zlig, BZips, LZMA 
  支持腳本 
  支持多語言 
  支持安裝界面定制 
  提供可擴展的插件接口 
  支持網絡安裝、補丁 
  支持無人值守的安裝模式 
  此外,NSIS的license允許任何用途免費使用。 

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

確定安裝的功能和界面元素 
編寫NSIS腳本 
使用NSIS提供的makensis或者makensisw程序,將步驟2編寫的腳本編譯成可執行的安裝程序 
調試安裝程序,如果有問題退到第二步重復 
隨著NSIS的流行,有一些第三方的NSIS腳本開發環境出現了,如HM NIS Edit,Venis IX前者是完全開源的,后者僅對個人和非商業用途免費。在這些集成開發環境下,步驟2,3可以方便的組合在一起。

NSIS腳本的結構
NSIS腳本(下稱nsi腳本)主要包含安裝程序屬性、頁面、區段、函數。
屬性用來定義安裝程序的行為和界面風格,這些屬性大部分是編譯時刻屬性,即不能在運行時刻改變。
頁面是指安裝程序的向導頁面,示例:
Page license
Page components
Page directory
Page instfiles
UninstPage uninstConfirm
UninstPage instfiles

區段是對應某種安裝/卸載選項的處理邏輯,該段代碼僅當用戶選擇相應的選項才被執行。卸載程序的區段名用"un."作為前綴,示例如下:
Section "Installer Section"
SectionEnd

Section "un.Uninstaller Section"
SectionEnd
在區段中可以使用很多指令用來完成諸如解壓縮文件、讀寫注冊表、創建目錄、創建快捷方式等任務,但最常用的指令是SetOutPath和File,前者用于指定目的位置,后者用于指定文件。示例:
Section "My Program"
  SetOutPath $INSTDIR
  File "My Program.exe"
  File "Readme.txt"
SectionEnd
區段名的修飾符/o表示該區段默認不選上,-表示隱藏區段(匿名區段也是隱藏區段),!表示需要粗體顯示的區段。
SectionIn表示該區段和安裝類型之間的關系:
SectionIn insttype_index [insttype_index] ... [RO]
RO修飾符表示不可修改。

子區段用于包含多個區段
SubSection [/e] Caption [subsection_name index output]
修飾符/e用于該子區段的所有區段是否默認展開。


函數包含了模塊化的安裝邏輯,在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

nsi腳本的變量定義
nsi腳本的變量定義用Var關鍵字,后跟變量名,變量是全局的并且是大小寫敏感的。變量引用時需要加上前綴$。
除了用戶自定義的變量外,nsi腳本中與定義寄存器變量$0~$9,$R0~$R9用于參數傳遞,以及系統變量用于特定用途,這些變量主要有:
$INSTDIR,$OUTDIR,$CMDLINE,$LANGUAGE這些變量都是可寫的。
$PROGRAMFILES,$COMMONFILES,$DESKTOP,$EXEDIR,${NSISDIR},$WINDIR,$SYSDIR,$ TEMP,$STARTMENU,$SMPROGRAMS,$SMSTARTUP,$QUICKLAUNCH,$DOCUMENTS,$SENDTO,$ RECENT,$F***ORITES,$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。

nsi腳本的編譯器指令
nsi腳本的編譯器指令主要指僅在編譯時刻執行的命令。這些命令主要用來包含文件、條件化編譯、定義常量、定義宏等。定義常量和宏是編譯器指令最主要應用。
定義常量的示例:
!define VERSION "1.0.3"
Name "My Program ${VERSION}"
OutFile "My Program Installer - ${VERSION}.exe"

定義宏的示例:
!macro MyFunc UN
Function ${UN}MyFunc
  Call ${UN}DoRegStuff
  ReadRegStr $0 HKLM Software\MyProgram key
  DetailPrint $0
FunctionEnd

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

插件
nsi支持插件,通過插件可以方便的擴展NSIS安裝程序的功能。NSIS插件是用C++,Delphi等語言編寫的dll,在nsi腳本中調用nsi中的函數使用如下語法:
DLLName::FunctionName "參數1" "參數2" "參數3"
示例1:
nsExec::ExecToLog '"${NSISDIR}\makensis.exe" /CMDHELP'
執行makensis.exe命令,顯示該命令用法。
示例2:
InstallOptions::dialog "$PLUGINSDIR\test.ini"
顯示對話框
示例3:
NSISdl::download http://download.nullsoft.com/winamp/client/winamp291_lite.exe $R0
下載文件
NSIS搜索插件的策略
默認情況下NSIS在其安裝目錄的子目錄Plugins中搜索插件,用戶可以使用!addplugindir指定增加插件的目錄位置。

nsi腳本的基本語法
注釋
單行注釋用井號"#"或分號";",跨行注釋用可以用c/C++中注釋語法。

數據類型
數字
   數字常量可以用十進制、十六進制(0x為前綴)、八進制(0為前綴)表示,顏色用類似html的中RGB表示法,但去井號"#"。
字符串
   字符串常量可以用引號引用,轉意字符用"$\"作前綴。美元符號、常用轉意字符換行、回車、制表符的nsi語法表示分別為:$$,$\n,$\r,$\t
續行符
    nsi腳本用行尾的反斜杠"\"表示下一行和當前行邏輯上是同一行

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

標號
   nsi使用GOTO語句和IfErrors, MessageBox, IfFileExists及StrCmp進行程序控制流表示,標號是這些語句的目標語句。標號定義的語法:
   標號:語句
   標號必須定義在函數和區段中,其作用范圍僅限于定義它的區段或函數。以點號"."開頭的標號是全局標號。
相對跳轉
    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"

頁面
向導頁面是NSIS安裝程序中最重要的界面元素,在nsi腳本中可以使用NSIS內置頁面或者定制界面,通過腳本可以指定頁面的順序、顯示樣子和行為。 Page指令用來定義安裝程序中的頁面,UninstPage用來定義,此外PageEx指令提供類是功能,但提供更多選項。頁面的順序和它在nsi腳本中出現的次序一致。
示例:
 Page license
 Page components
 Page directory
 Page instfiles
 UninstPage uninstConfirm
 UninstPage instfiles
規定安裝程序首先顯示license頁面,然后顯示components選擇頁面,接著顯示安裝目錄選擇頁面。

頁面選項
不同的頁面有不同的選項:
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]
  OR
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

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

以下是常用的基本指令:
Delete
Delete [/REBOOTOK] file

Exec 
Exec command

ExecShell
ExecShell action command [parameters] [SW_SHOWNORMAL | SW_SHOWMAXIMIZED | SW_SHOWMINIMIZED | SW_HIDE]ExecShell "open" 示例"http://nsis.sf.net/"
ExecWait
ExecWait command [user_var(exit code)]
示例:
ExecWait '"$INSTDIR\someprogram.exe"'
ExecWait '"$INSTDIR\someprogram.exe"' $0
DetailPrint "some program returned $0"


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

Rename
Rename [/REBOOTOK] source_file dest_file

RMDir
RMDir [/r] [/REBOOTOK] directory_name

posted on 2007-06-13 10:57 大龍 閱讀(1374) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧美日韩网| 亚洲美女黄色| 欧美日韩国产va另类| 欧美在线观看日本一区| 国产精品网红福利| 亚洲国产一区二区精品专区| 亚洲精品日韩在线观看| 欧美日韩国产精品一区二区亚洲 | 在线成人www免费观看视频| 国产精品v亚洲精品v日韩精品 | 久久亚洲欧美国产精品乐播| 国产网站欧美日韩免费精品在线观看| 久久躁日日躁aaaaxxxx| 亚洲久久在线| 欧美日韩久久| 久久精品视频在线| 亚洲欧美韩国| 亚洲线精品一区二区三区八戒| 亚洲电影在线| 欧美高清在线一区二区| 亚洲美女av网站| 亚洲欧洲日产国产网站| 国产欧美1区2区3区| 欧美午夜一区| 国产欧美日韩在线| 国产精品久久久久久久久免费| 欧美精品二区三区四区免费看视频| 蜜臀av一级做a爰片久久| 国产精品成人一区二区| 精品成人久久| 亚洲免费在线视频| 亚洲大片在线观看| 亚洲欧美激情四射在线日| 免费永久网站黄欧美| 国产伦精品一区二区三区视频孕妇| 一区二区三区在线视频免费观看| 亚洲图色在线| 欧美国产大片| 久久久免费精品| 国产女主播一区二区| 在线亚洲免费视频| 亚洲大片免费看| 性色一区二区| 欧美日韩三级视频| 亚洲第一精品久久忘忧草社区| 一区二区三欧美| 久久网站免费| 亚洲在线黄色| 欧美三级视频在线| 最新亚洲一区| 久久男人av资源网站| 亚洲午夜性刺激影院| 欧美激情久久久久久| 禁断一区二区三区在线| 午夜精品久久久久久久久久久| 亚洲福利久久| 久久亚洲美女| 在线观看亚洲一区| 久热精品视频在线观看| 久久gogo国模啪啪人体图| 国产精品久久久久久久久久尿 | 久久精品欧美日韩| 国产日韩精品在线| 欧美制服丝袜第一页| 亚洲尤物在线视频观看| 国产精品久久91| 亚洲综合色自拍一区| 亚洲午夜久久久久久久久电影网| 国产精品黄色| 欧美在线综合视频| 久久本道综合色狠狠五月| 国产一区二区日韩精品| 久久久久久亚洲精品中文字幕| 午夜精品视频一区| 国产在线不卡| 亚洲第一网站| 一区二区久久| 欧美日韩国产综合视频在线观看 | 久久久久久久久综合| 欧美福利电影网| 亚洲一区二区三区高清| 欧美99在线视频观看| 亚洲国产成人久久综合| 中文网丁香综合网| 欧美激情精品久久久久久变态| 日韩亚洲欧美成人| aa亚洲婷婷| 国产精品久久久久久福利一牛影视| 国产一区二区av| 免费在线一区二区| 国产精品久久久久91| 日韩视频在线一区| 美女精品在线| 久久国产婷婷国产香蕉| 麻豆精品传媒视频| 欧美一区免费视频| 国产又爽又黄的激情精品视频| 久久久久久久久久久久久女国产乱| 亚洲欧美日韩高清| 午夜精品久久久久久久久久久| 亚洲欧美激情精品一区二区| av成人黄色| 久久成人av少妇免费| 亚洲午夜影视影院在线观看| 午夜精品剧场| 亚洲裸体俱乐部裸体舞表演av| 中文精品视频一区二区在线观看| 国内精品99| 亚洲淫性视频| 国内偷自视频区视频综合| 久久久久一区二区三区四区| 欧美极品色图| 亚洲国产精选| 亚洲欧洲精品一区二区三区不卡 | 欧美 日韩 国产 一区| 亚洲综合日韩在线| 亚洲视频精选| 国产一区二区三区四区三区四| 亚洲免费网址| 久久久免费观看视频| 宅男噜噜噜66国产日韩在线观看| 国产精品久久久久久久第一福利 | 国产综合香蕉五月婷在线| 欧美国产精品一区| 欧美精品videossex性护士| 欧美成人一区二区三区片免费| 欧美国产一区二区在线观看 | 亚洲国产一区视频| 久久天堂国产精品| 欧美激情一区二区久久久| 日韩系列在线| 国产亚洲一区二区三区在线观看| 美女黄色成人网| 久久久久88色偷偷免费| 亚洲欧美国产高清| 亚洲高清一二三区| 亚洲一卡久久| 欧美阿v一级看视频| 狂野欧美激情性xxxx| 国产一区二区三区免费观看| 欧美国产视频在线观看| 久久久久久电影| 亚洲国产激情| 午夜精品亚洲| 亚洲无毛电影| 亚洲欧美日韩区| 男女视频一区二区| 日韩视频在线免费| 国产精品私房写真福利视频| 亚洲精品一区中文| 久久夜色精品国产噜噜av| 亚洲伦理一区| 美日韩丰满少妇在线观看| 国产精品午夜在线| 激情国产一区| 日韩视频久久| 亚洲一区二区三区国产| 亚洲免费av电影| 国产欧美一区二区精品性| 久久久精品999| 欧美日韩精品一区二区三区四区| 亚洲一区二区综合| 欧美一区二区三区视频免费| 在线精品高清中文字幕| 女仆av观看一区| 欧美日韩在线不卡一区| 久久午夜色播影院免费高清| 欧美国产免费| 亚洲欧美在线一区| 久久―日本道色综合久久| 亚洲一区二区伦理| 欧美色图五月天| 欧美成人免费va影院高清| 欧美午夜电影在线观看| 亚洲国产精品激情在线观看| 欧美日韩亚洲一区二区三区| 午夜视频久久久| 欧美人与禽性xxxxx杂性| 久久精品国产69国产精品亚洲| 久久久久高清| 一本色道久久综合亚洲精品婷婷 | 亚洲在线视频网站| 欧美日韩一区二区欧美激情| 久久免费精品视频| 欧美日韩精品一区二区三区| 午夜欧美大片免费观看| 久热精品视频在线免费观看| 亚洲视频中文| 欧美极品一区| 亚洲日本一区二区三区| 在线免费观看成人网| 亚洲一区www| 日韩一级在线观看| 西西人体一区二区| 9国产精品视频| 欧美精品乱码久久久久久按摩| 国产精品主播| 亚洲美女黄色片| 亚洲欧美日韩一区| 亚洲三级免费|