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

大龍的博客

常用鏈接

統(tǒng)計(jì)

最新評(píng)論

NSIS

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


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

開發(fā)一個(gè)NSIS的安裝程序通常有以下幾步:

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

NSIS腳本的結(jié)構(gòu)
NSIS腳本(下稱nsi腳本)主要包含安裝程序?qū)傩?、?yè)面、區(qū)段、函數(shù)。
屬性用來(lái)定義安裝程序的行為和界面風(fēng)格,這些屬性大部分是編譯時(shí)刻屬性,即不能在運(yùn)行時(shí)刻改變。
頁(yè)面是指安裝程序的向?qū)ы?yè)面,示例:
Page license
Page components
Page directory
Page instfiles
UninstPage uninstConfirm
UninstPage instfiles

區(qū)段是對(duì)應(yīng)某種安裝/卸載選項(xiàng)的處理邏輯,該段代碼僅當(dāng)用戶選擇相應(yīng)的選項(xiàng)才被執(zhí)行。卸載程序的區(qū)段名用"un."作為前綴,示例如下:
Section "Installer Section"
SectionEnd

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

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


函數(shù)包含了模塊化的安裝邏輯,在nsi腳本中函數(shù)分為兩種:用戶自定義函數(shù)和回調(diào)函數(shù)。用戶自定義函數(shù)僅當(dāng)是Call指令調(diào)用時(shí)才被執(zhí)行,如果函數(shù)體中沒(méi)有abort語(yǔ)句,則安裝程序執(zhí)行完了用戶自定義函數(shù),繼續(xù)運(yùn)行Call語(yǔ)句和指令。
用戶自定義函數(shù)的語(yǔ)法如下:
Function <函數(shù)名>
  # some commands
FunctionEnd
函數(shù)的調(diào)用則使用以下語(yǔ)法:
  Call <函數(shù)名>
可見(jiàn)無(wú)論是函數(shù)的定義還是函數(shù)的調(diào)用都沒(méi)有參數(shù)傳遞。通常nsi的參數(shù)傳遞是通過(guò)堆棧操作Pop,Push和20個(gè)寄存器變量$0~$9, $R0~$R9進(jìn)行的。也可以通過(guò)全局變量完成參數(shù)傳遞。如:

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


回調(diào)函數(shù)則是由在特定的時(shí)間點(diǎn)觸發(fā)的程序段。常用的回調(diào)函數(shù)如.onInit:
Function .onInit
  MessageBox MB_YESNO "This will install My Program. Do you wish to continue?" IDYES gogogo
    Abort
  gogogo:
FunctionEnd
NSIS對(duì)于安裝邏輯定義以下回調(diào)函數(shù):.onGUIInit、.onInit、.onInstFailed、.onInstSuccess、. onGUIEnd、.onMouseOverSection、.onRebootFailed、.onSelChange、.onUserAbort、. onVerifyInstDir
NSIS對(duì)于卸載邏輯定義以下回調(diào)函數(shù):un.onGUIInit、un.onInit、un.onUninstFailed、un.onUninstSuccess、un.onGUIEnd、un.onRebootFailed、un.onUserAbort

nsi腳本的變量定義
nsi腳本的變量定義用Var關(guān)鍵字,后跟變量名,變量是全局的并且是大小寫敏感的。變量引用時(shí)需要加上前綴$。
除了用戶自定義的變量外,nsi腳本中與定義寄存器變量$0~$9,$R0~$R9用于參數(shù)傳遞,以及系統(tǒng)變量用于特定用途,這些變量主要有:
$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腳本中可用于調(diào)試的系統(tǒng)函數(shù)有MessageBoxes,DetailPrint,Dumpstate。

nsi腳本的編譯器指令
nsi腳本的編譯器指令主要指僅在編譯時(shí)刻執(zhí)行的命令。這些命令主要用來(lái)包含文件、條件化編譯、定義常量、定義宏等。定義常量和宏是編譯器指令最主要應(yīng)用。
定義常量的示例:
!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系統(tǒng)的界面風(fēng)格,它由歡迎頁(yè)面、結(jié)束頁(yè)面和其他向?qū)ы?yè)面構(gòu)成。

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

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

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

默認(rèn)頭文件
    如果在makensis同目錄下有nsisconf.nsh文件,該文件會(huì)被自動(dòng)包含,除非編譯時(shí)指定/NOCONFIG選項(xiàng)

標(biāo)號(hào)
   nsi使用GOTO語(yǔ)句和IfErrors, MessageBox, IfFileExists及StrCmp進(jìn)行程序控制流表示,標(biāo)號(hào)是這些語(yǔ)句的目標(biāo)語(yǔ)句。標(biāo)號(hào)定義的語(yǔ)法:
   標(biāo)號(hào):語(yǔ)句
   標(biāo)號(hào)必須定義在函數(shù)和區(qū)段中,其作用范圍僅限于定義它的區(qū)段或函數(shù)。以點(diǎn)號(hào)"."開頭的標(biāo)號(hào)是全局標(biāo)號(hào)。
相對(duì)跳轉(zhuǎn)
    nsi腳本常常使用相對(duì)跳轉(zhuǎn)表示條件分枝,其語(yǔ)法是[+-][1-9],加號(hào)表示從當(dāng)前位置往前跳轉(zhuǎn),減號(hào)則表示從當(dāng)前位置往后跳轉(zhuǎn)。數(shù)字表示跳轉(zhuǎn)的語(yǔ)句條數(shù)。示例:
 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"

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

頁(yè)面選項(xiàng)
不同的頁(yè)面有不同的選項(xiàng):
License page有LicenseText,LicenseData,LicenseForceSelection;
Components selection頁(yè)面有ComponentText;
Directory selection頁(yè)面有DirText,DirVar(僅能在PageEx中使用),DirVerify;
Un/Installation log頁(yè)面有DetailsButtonText,CompletedText;
Uninstall confirmation頁(yè)面有DirVar(僅能在PageEx中使用),UninstallText
對(duì)于內(nèi)置的Page,NSIS支持三個(gè)回調(diào)函數(shù)用于定制界面和驗(yàn)證,對(duì)于自定義頁(yè)面NSIS支持兩個(gè)回調(diào)函數(shù)。

Page指令語(yǔ)法
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指令語(yǔ)法
UninstPage custom [creator_function] [leave_function] [caption]
  OR
UninstPage (license|components|directory|instfiles|uninstConfirm) [pre_function] [show_function] [leave_function]


PageEx語(yǔ)法
  PageEx使用嵌套結(jié)構(gòu),比如:
 PageEx license
   LicenseText "Readme"
   LicenseData readme.rtf
   PageCallbacks licensePre licenseShow licenseLeave
 PageExEnd

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

以下是常用的基本指令:
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選項(xiàng)用作遞歸模式,/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) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   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>
            久久精品国产99| 一本大道久久精品懂色aⅴ| 亚洲人成网站在线播| 亚洲午夜一区二区三区| 最新69国产成人精品视频免费| 国产日本欧美在线观看| 欧美视频在线观看一区| 欧美精品1区2区3区| 欧美激情第二页| 欧美视频中文在线看| 欧美视频一区二区| 国产日韩精品在线播放| 狠狠色丁香久久综合频道| 国产一区二区三区丝袜| 一色屋精品视频在线观看网站| 黄色亚洲免费| 日韩午夜精品| 欧美一区二区三区喷汁尤物| av成人免费在线观看| 亚洲一区二区三区免费在线观看| 亚洲男人的天堂在线aⅴ视频| 亚洲欧美日韩综合国产aⅴ| 欧美一区二区在线观看| 久久夜色精品亚洲噜噜国产mv| 巨乳诱惑日韩免费av| 91久久精品网| 久久国产婷婷国产香蕉| 欧美大片在线看| 国产偷自视频区视频一区二区| 亚洲国产99| 欧美与黑人午夜性猛交久久久| 国产欧美一区二区三区国产幕精品| 国产视频在线观看一区二区三区| 永久免费精品影视网站| 日韩视频免费在线| 久久蜜桃精品| 亚洲视频免费在线| 欧美mv日韩mv国产网站| 国产精品综合色区在线观看| 国内揄拍国内精品少妇国语| 在线看不卡av| 欧美在线首页| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 99日韩精品| 久久一区二区三区超碰国产精品| 欧美大胆a视频| 影音欧美亚洲| 久久久久se| 亚洲欧美日韩一区二区三区在线观看| 欧美国产一区二区| 亚洲福利视频一区二区| 欧美一区二区三区精品| 一本大道久久a久久精品综合| 老司机精品视频网站| 国产亚洲欧洲一区高清在线观看| 一本色道久久综合狠狠躁篇的优点| 久久视频一区二区| 欧美专区在线观看| 国产午夜精品久久久久久免费视| 亚洲图片在线观看| 日韩一级黄色片| 欧美日韩午夜激情| 一区二区三区三区在线| 亚洲国产日韩欧美| 欧美好吊妞视频| 一本一道久久综合狠狠老精东影业| 男女精品网站| 猛干欧美女孩| 亚洲人成网站色ww在线| 欧美激情国产日韩| 欧美国产三级| 亚洲一区欧美激情| 亚洲欧美视频一区| 狠狠v欧美v日韩v亚洲ⅴ| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲一区二区在线| 国内偷自视频区视频综合| 久久久人成影片一区二区三区| 性色一区二区| 最近中文字幕日韩精品| 欧美激情国产日韩| 国产精品www.| 久久婷婷人人澡人人喊人人爽| 欧美资源在线| 亚洲精品日本| 久久久久久穴| 欧美成人黑人xx视频免费观看| 91久久精品国产91性色tv| 91久久国产自产拍夜夜嗨| 欧美日韩亚洲一区在线观看| 亚洲精品一区二区三区在线观看 | 夜夜精品视频一区二区| 亚洲精品欧美精品| 国产精品专区一| 亚洲福利在线视频| 国产欧美精品| 亚洲日本va午夜在线影院| 国产精品久久久久免费a∨| 欧美一级淫片aaaaaaa视频| 久久久精品日韩欧美| 91久久精品国产91久久| 亚洲一区3d动漫同人无遮挡| 国产精品美女久久久免费| 快播亚洲色图| 国产精品久久久久久妇女6080 | 在线亚洲高清视频| 欧美一区免费视频| 亚洲视频福利| 久久字幕精品一区| 久久爱另类一区二区小说| 蜜臀av性久久久久蜜臀aⅴ四虎| 一区二区三区视频在线 | 欧美不卡视频一区发布| 亚洲性色视频| 欧美成人精品在线视频| 久久国产精品高清| 国产精品白丝av嫩草影院| 久热成人在线视频| 国产精品日韩欧美一区二区三区| 女女同性精品视频| 国产日韩欧美综合一区| 亚洲精品孕妇| 亚洲美洲欧洲综合国产一区| 亚洲视频日本| 中文一区二区在线观看| 欧美不卡视频| 欧美高清在线一区二区| 国内精品久久久久影院 日本资源| 亚洲肉体裸体xxxx137| 国产主播精品在线| 午夜国产精品影院在线观看| 亚洲黄色成人久久久| 久久精品午夜| 久久综合色婷婷| 极品少妇一区二区三区| 午夜精品区一区二区三| 一区二区三区精品在线| 麻豆九一精品爱看视频在线观看免费| 久久久久久久成人| 激情欧美一区二区| 久热成人在线视频| 亚洲二区免费| 一区二区三区欧美视频| 国产欧美成人| 99在线观看免费视频精品观看| **欧美日韩vr在线| 久久综合九色欧美综合狠狠| 午夜一区二区三区在线观看| 欧美成人首页| 亚洲精品在线观| 欧美一区二区日韩一区二区| 欧美精品日韩综合在线| 亚洲国产二区| 一区二区三区四区五区精品视频 | 免费永久网站黄欧美| 国产一区二区精品| 久久久夜色精品亚洲| 久久亚洲私人国产精品va| 国产一区二区无遮挡| 久久精品国产欧美亚洲人人爽| 欧美中文在线字幕| 在线成人免费视频| 欧美黄免费看| 亚洲一区日韩在线| 麻豆久久精品| 宅男噜噜噜66一区二区| 噜噜噜在线观看免费视频日韩 | 亚洲一区综合| 国产精品亚发布| 久久婷婷丁香| 亚洲国产婷婷| 午夜精彩视频在线观看不卡 | 亚洲高清视频在线观看| 裸体素人女欧美日韩| 欧美激情一区二区三区在线视频| 亚洲三级影院| 国产精品亚发布| 欧美国产精品久久| 欧美综合国产精品久久丁香| 久久综合影音| 欧美一区二区成人| 99精品视频免费| 韩日成人av| 91久久视频| 国语精品中文字幕| 亚洲日本中文| 国产视频在线观看一区| 亚洲精品一二| 久久久久久久综合色一本| 欧美福利一区二区三区| 亚洲精品系列| 国产欧美日韩麻豆91| 欧美一区二区视频在线| 久久久精品国产免费观看同学| 激情婷婷亚洲| 亚洲欧美亚洲| 亚洲欧美日韩精品久久奇米色影视| 欧美成人免费在线视频| 每日更新成人在线视频| 狠狠色伊人亚洲综合网站色|