二. 简单的NSIS安装包
新建腳本:向?qū)?/strong>
我們先從一個(gè)簡(jiǎn)單的NSIS安裝包開(kāi)始吧,就像前面(NSIS介紹)所說(shuō),我們雖然看過(guò)用戶手冊(cè),可要寫(xiě)安裝腳本無(wú)從下手,那我們的編輯工具HM NIS Edit就派上用場(chǎng)了。
打開(kāi)HM NIS Edit,點(diǎn)擊菜單“文件”->“新建腳本:向?qū)А?#xff0c;會(huì)有向?qū)б徊讲阶屛覀冚斎胄畔?#xff0c;最后根據(jù)我們的輸入生成.nsi腳本文件,下面我們一步步演示:
新建腳本:腳本文件
最后生成的腳本文件我們保存為MyApp.nsi,打開(kāi)查看腳本(對(duì)照著上面截圖中設(shè)置的項(xiàng)再配合用戶手冊(cè)查看,你會(huì)知道一個(gè)完整的腳本文件的基本結(jié)構(gòu)和基本的指令用法)
; Script generated by the HM NIS Edit Script Wizard.; HM NIS Edit Wizard helper defines !define PRODUCT_NAME "My application" !define PRODUCT_VERSION "1.0" !define PRODUCT_PUBLISHER "My company, Inc." !define PRODUCT_WEB_SITE "http://www.mycompany.com" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM"; MUI 1.67 compatible ------ !include "MUI.nsh"; MUI Settings !define MUI_ABORTWARNING !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico" !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"; Welcome page !insertmacro MUI_PAGE_WELCOME ; License page !insertmacro MUI_PAGE_LICENSE "E:\ZZL\ADWeb\安裝包制作\Licence.txt" ; Directory page !insertmacro MUI_PAGE_DIRECTORY ; Instfiles page !insertmacro MUI_PAGE_INSTFILES ; Finish page !insertmacro MUI_PAGE_FINISH; Uninstaller pages !insertmacro MUI_UNPAGE_INSTFILES; Language files !insertmacro MUI_LANGUAGE "SimpChinese"; MUI end ------Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "Setup.exe" InstallDir "$PROGRAMFILES\My application" ShowInstDetails show ShowUnInstDetails showSection "MainSection" SEC01SetOutPath "$INSTDIR"SetOverwrite tryFile "E:\ZZL\ADWeb\安裝包制作\Release\404.aspx"File "E:\ZZL\ADWeb\安裝包制作\Release\Default.aspx"File "E:\ZZL\ADWeb\安裝包制作\Release\Error.aspx"SetOutPath "$INSTDIR\Images"File "E:\ZZL\ADWeb\安裝包制作\Release\Images\1_close.png"File "E:\ZZL\ADWeb\安裝包制作\Release\Images\1_open.png"File "E:\ZZL\ADWeb\安裝包制作\Release\Images\add.png"SetOutPath "$INSTDIR\Scripts"File "E:\ZZL\ADWeb\安裝包制作\Release\Scripts\CommonScript.js"SetOutPath "$INSTDIR\SystemLog"File "E:\ZZL\ADWeb\安裝包制作\Release\SystemLog\LogStatisticsDetail.aspx"File "E:\ZZL\ADWeb\安裝包制作\Release\SystemLog\SystemLogList.aspx"File "E:\ZZL\ADWeb\安裝包制作\Release\SystemLog\SystemLogStatistics.aspx"SetOutPath "$INSTDIR"File "E:\ZZL\ADWeb\安裝包制作\Release\Web.config" SectionEndSection -PostWriteUninstaller "$INSTDIR\uninst.exe"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" SectionEndFunction un.onUninstSuccessHideWindowMessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地從你的計(jì)算機(jī)移除。" FunctionEndFunction un.onInitMessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "你確實(shí)要完全移除 $(^Name) ,其及所有的組件?" IDYES +2Abort FunctionEndSection UninstallDelete "$INSTDIR\uninst.exe"Delete "$INSTDIR\Web.config"Delete "$INSTDIR\SystemLog\SystemLogStatistics.aspx"Delete "$INSTDIR\SystemLog\SystemLogList.aspx"Delete "$INSTDIR\SystemLog\LogStatisticsDetail.aspx"Delete "$INSTDIR\Scripts\CommonScript.js"Delete "$INSTDIR\Images\add.png"Delete "$INSTDIR\Images\1_open.png"Delete "$INSTDIR\Images\1_close.png"Delete "$INSTDIR\Error.aspx"Delete "$INSTDIR\Default.aspx"Delete "$INSTDIR\404.aspx"RMDir "$INSTDIR\SystemLog"RMDir "$INSTDIR\Scripts"RMDir "$INSTDIR\Images"RMDir "$INSTDIR"DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"SetAutoClose true SectionEnd值得注意的是,從新建腳本向?qū)У牡谌接羞x項(xiàng)用戶圖形界面我們默認(rèn)選擇的是“現(xiàn)代”,對(duì)應(yīng)腳本中引入了NSIS現(xiàn)代用戶界面頭文件(!include "MUI.nsh"),對(duì)應(yīng)的安裝頁(yè)面中都是以!insertmacro MUI_PAGE_***開(kāi)頭(如:歡迎頁(yè)面!insertmacro MUI_PAGE_WELCOME),詳細(xì)的說(shuō)明請(qǐng)查看NSIS Modern User Interface。
安裝包:現(xiàn)代界面
下面我們看下安裝包的效果,在HM NIS Edit界面,點(diǎn)擊菜單“NSIS”->“編譯并運(yùn)行”,輸出窗口會(huì)顯示編譯過(guò)程,如果沒(méi)有出錯(cuò),會(huì)直接執(zhí)行編譯生成的Setup.exe,安裝截圖如下:
從上面截圖可以看到我們的安裝包共有5個(gè)用戶界面,這個(gè)和腳本文件中是對(duì)應(yīng)的:
; Welcome page !insertmacro MUI_PAGE_WELCOME ; License page !insertmacro MUI_PAGE_LICENSE "E:\ZZL\ADWeb\安裝包制作\Licence.txt" ; Directory page !insertmacro MUI_PAGE_DIRECTORY ; Instfiles page !insertmacro MUI_PAGE_INSTFILES ; Finish page !insertmacro MUI_PAGE_FINISH其中“安裝記錄頁(yè)面”將實(shí)際執(zhí)行安裝區(qū)段中的指令,這些指令可以解壓文件讀取,讀寫(xiě)注冊(cè)表、INI文件或普通文件,執(zhí)行Powershell腳本,創(chuàng)建目錄,創(chuàng)建快捷方式等等。如果一個(gè)安裝程序有多個(gè)組件,每個(gè)組件都有它自己的代碼塊,當(dāng)用戶選擇了安裝該組件,那么安裝程序就會(huì)執(zhí)行對(duì)應(yīng)的代碼,那么每個(gè)組件就需要對(duì)應(yīng)一個(gè)區(qū)段,具體關(guān)于可選組件的信息會(huì)在以后章節(jié)介紹。我們目前只有一個(gè)安裝區(qū)段,是把部署包文件放入安裝目錄:
Section "MainSection" SEC01SetOutPath "$INSTDIR"SetOverwrite tryFile "E:\ZZL\ADWeb\安裝包制作\Release\404.aspx"File "E:\ZZL\ADWeb\安裝包制作\Release\Default.aspx"File "E:\ZZL\ADWeb\安裝包制作\Release\Error.aspx"SetOutPath "$INSTDIR\Images"File "E:\ZZL\ADWeb\安裝包制作\Release\Images\1_close.png"File "E:\ZZL\ADWeb\安裝包制作\Release\Images\1_open.png"File "E:\ZZL\ADWeb\安裝包制作\Release\Images\add.png"Sleep 20000SetOutPath "$INSTDIR\Scripts"File "E:\ZZL\ADWeb\安裝包制作\Release\Scripts\CommonScript.js"SetOutPath "$INSTDIR\SystemLog"File "E:\ZZL\ADWeb\安裝包制作\Release\SystemLog\LogStatisticsDetail.aspx"File "E:\ZZL\ADWeb\安裝包制作\Release\SystemLog\SystemLogList.aspx"File "E:\ZZL\ADWeb\安裝包制作\Release\SystemLog\SystemLogStatistics.aspx"SetOutPath "$INSTDIR"File "E:\ZZL\ADWeb\安裝包制作\Release\Web.config" SectionEnd關(guān)于界面上的信息都是我們?cè)谀_本向?qū)е性O(shè)置的(如應(yīng)用程序名稱(chēng)、版本、公司、圖標(biāo)、授權(quán)信息、語(yǔ)言等),可以在腳本中修改:
; HM NIS Edit Wizard helper defines !define PRODUCT_NAME "My application" !define PRODUCT_VERSION "1.0" !define PRODUCT_PUBLISHER "My company, Inc." !define PRODUCT_WEB_SITE "http://www.mycompany.com" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM"; MUI 1.67 compatible ------ !include "MUI.nsh"; MUI Settings !define MUI_ABORTWARNING !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico" !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"還有一些是關(guān)于安裝包本身的信息(如:名稱(chēng)、默認(rèn)安裝路徑、生成安裝包名稱(chēng)、是否顯示安裝詳情等):
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "Setup.exe" InstallDir "$PROGRAMFILES\ADWebManager" InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" ShowInstDetails show ShowUnInstDetails show BrandingText " MyCompany Ltd."其中注意加一行命令BrandingText " Prolliance Ltd.",這樣用戶安裝界面中就不是NSIS的信息了,前后對(duì)比如下:
修改腳本:標(biāo)準(zhǔn)界面
上面我們使用HM NIS Edit的向?qū)?chuàng)建了具有“現(xiàn)代界面”的安裝包,其中腳本文件中引入了NSIS現(xiàn)代用戶界面頭文件(!include "MUI.nsh"),現(xiàn)在我們不要引入額外的頭文件,改成NSIS標(biāo)準(zhǔn)的界面試試,就像我們查看用戶手冊(cè)看到的,我們可以通過(guò)Page命令(或更多高級(jí)設(shè)置如PageEx)。我們修改后的腳本文件如下:
; Script generated by the HM NIS Edit Script Wizard.; HM NIS Edit Wizard helper defines !define PRODUCT_NAME "My application" !define PRODUCT_VERSION "1.0" !define PRODUCT_PUBLISHER "My company, Inc." !define PRODUCT_WEB_SITE "http://www.mycompany.com" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM"; pages PageEx licenseLicenseText "許可頁(yè)面"LicenseData "E:\ZZL\ADWeb\安裝包制作\Licence.txt";LicenseForceSelection PageExEnd PageEx directoryDirText "目錄選擇頁(yè)面" "目標(biāo)文件夾" "瀏覽..." PageExEnd Page instfiles UninstPage uninstConfirm UninstPage instfiles; MUI end ------Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "Setup.exe" InstallDir "$PROGRAMFILES\My application" ShowInstDetails show ShowUnInstDetails show BrandingText " MyCompany Ltd."Section "MainSection" SEC01SetOutPath "$INSTDIR"SetOverwrite tryFile "E:\ZZL\ADWeb\安裝包制作\Release\404.aspx"File "E:\ZZL\ADWeb\安裝包制作\Release\Default.aspx"File "E:\ZZL\ADWeb\安裝包制作\Release\Error.aspx"SetOutPath "$INSTDIR\Images"File "E:\ZZL\ADWeb\安裝包制作\Release\Images\1_close.png"File "E:\ZZL\ADWeb\安裝包制作\Release\Images\1_open.png"File "E:\ZZL\ADWeb\安裝包制作\Release\Images\add.png"Sleep 20000SetOutPath "$INSTDIR\Scripts"File "E:\ZZL\ADWeb\安裝包制作\Release\Scripts\CommonScript.js"SetOutPath "$INSTDIR\SystemLog"File "E:\ZZL\ADWeb\安裝包制作\Release\SystemLog\LogStatisticsDetail.aspx"File "E:\ZZL\ADWeb\安裝包制作\Release\SystemLog\SystemLogList.aspx"File "E:\ZZL\ADWeb\安裝包制作\Release\SystemLog\SystemLogStatistics.aspx"SetOutPath "$INSTDIR" SectionEndSection -PostWriteUninstaller "$INSTDIR\uninst.exe"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" SectionEndFunction un.onUninstSuccessHideWindowMessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地從你的計(jì)算機(jī)移除。" FunctionEndFunction un.onInitMessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "你確實(shí)要完全移除 $(^Name) ,其及所有的組件?" IDYES +2Abort FunctionEndSection UninstallDelete "$INSTDIR\uninst.exe"Delete "$INSTDIR\Web.config"Delete "$INSTDIR\SystemLog\SystemLogStatistics.aspx"Delete "$INSTDIR\SystemLog\SystemLogList.aspx"Delete "$INSTDIR\SystemLog\LogStatisticsDetail.aspx"Delete "$INSTDIR\Scripts\CommonScript.js"Delete "$INSTDIR\Images\add.png"Delete "$INSTDIR\Images\1_open.png"Delete "$INSTDIR\Images\1_close.png"Delete "$INSTDIR\Error.aspx"Delete "$INSTDIR\Default.aspx"Delete "$INSTDIR\404.aspx"RMDir "$INSTDIR\SystemLog"RMDir "$INSTDIR\Scripts"RMDir "$INSTDIR\Images"RMDir "$INSTDIR"DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"SetAutoClose true SectionEnd安裝包:標(biāo)準(zhǔn)界面
下面我們看下標(biāo)準(zhǔn)界面的腳本生成的安裝包效果,執(zhí)行后在HM NIS Edit界面,點(diǎn)擊菜單“NSIS”->“編譯并運(yùn)行”,輸出窗口會(huì)顯示編譯過(guò)程,如果沒(méi)有出錯(cuò),會(huì)直接執(zhí)行編譯生成的Setup.exe,安裝截圖如下:
是不是比較起來(lái)“現(xiàn)代用戶界面”,標(biāo)準(zhǔn)的界面會(huì)很丑,而且NSIS內(nèi)置的標(biāo)準(zhǔn)安裝界面沒(méi)有歡迎、完成界面(只有許可、目錄選擇、組件、安裝記錄頁(yè)面) ,另外“上一步”、“下一步”、“取消”等按鈕需要額外的語(yǔ)言包文件來(lái)載入,不如“現(xiàn)代用戶界面”只需要一個(gè)指令(!insertmacro MUI_LANGUAGE "SimpChinese")來(lái)指定采用的語(yǔ)言,所以接下來(lái)我們還是采用“現(xiàn)代用戶界面”來(lái)制作安裝包,當(dāng)然這些界面上的圖標(biāo),任何地方的文字都是可以定制的。
下面章節(jié)就以實(shí)際中的應(yīng)用作為例子,然后由該例子展開(kāi)來(lái)說(shuō)明頁(yè)面的定制、PowerShell命令的調(diào)用、SQL Server數(shù)據(jù)庫(kù)的訪問(wèn)、Web應(yīng)用程序的部署、失敗的回滾和卸載程序的執(zhí)行等等。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的二. 简单的NSIS安装包的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Intel锐炫A370M独显性能实测:能
- 下一篇: oracle 11g exp 报错 EX