NSIS打包教程
NSIS簡介
NSIS是"Nullsoft 腳本安裝系統"(Nullsoft scriptable Installation System)的縮寫,它是是一個免費的win32安裝、卸載系統,可以很方便的打包windows應用程序。它的特點:腳本簡潔高效;系統開銷少;支持安裝、卸載、系統設置、解壓文件等功能。
打包步驟
1.下載NSIS腳本安裝系統,啟動NSIS Edit,點擊“文件"菜單中"新建腳本:向導",腳本向導可根據具體要求生成一個腳本模板。
2.應用程序信息,設置要打包的應用程序的名稱、版本號、出版人等,可以預留一個網站,在后面設置生成一個對應網址的“Internet 快捷方式”,下一步。
3.安裝程序選項,設置生成安裝程序的圖標、名字、語言(SimpChinese為中文)、用戶圖形界面的樣式、壓縮算法等。可選擇默認,也可根據要求進行修改,下一步。
4.快閃屏幕和背景窗口,設置安裝程序在安裝時的一些樣式,這里選擇默認,下一步。
5.應用程序的目錄與授權信息,設置安裝程序進行安裝時默認的安裝路徑,授權文件可以不選,下一步。
6.應用程序文件,設置我們需要打包的文件,例如exe文件、dll文件、配置文件等,可以選擇目錄,也可以選擇文件,下一步。
7.應用程序圖標,設置安裝程序安裝完成后開始菜單中應用程序文件夾名字以及文件夾中的內容,選擇生成快捷方式的位置,下一步。
8.安裝程序之后運行,設置安裝程序安裝完成后運行應用程序的路徑,下一步。
9.解除安裝程序,設置卸載程序的圖標以及一些提示信息,下一步,完成。
注:這里有一些信息使用了變量來表示,因為腳本中可能多個地方使用該值,使用變量可以方便修改,統一管理。這些變量在下面的腳本中會設置相應的值。
NSIS腳本
; 該腳本使用 HM VNISEdit 腳本編輯器向導產生; 安裝程序初始定義常量 !define PRODUCT_NAME "急支糖漿" ;應用程序的名稱 !define PRODUCT_VERSION "6.6.6" ;應用程序的版本號 !define PRODUCT_OUTPUT "急支糖漿${PRODUCT_VERSION}.exe" ;生成安裝程序的名字 !define PRODUCT_SETUP "E:\急支糖漿" ;安裝時默認的安裝路徑 !define PRODUCT_EXE "jizhitangjiang.exe" ;安裝路徑下的應用程序exe !define PRODUCT_PUBLISHER "急支糖漿" ;發布者 !define PRODUCT_WEB_SITE "http://www.baidu.com" ;預留網站 !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM"SetCompressor lzma ;壓縮算法; ------ MUI 現代界面定義 (1.67 版本以上兼容) ------ !include "MUI.nsh"; MUI 預定義常量 !define MUI_ABORTWARNING !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\nsis1-install.ico" !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\llama-blue.ico"!define MUI_HEADERIMAGE !define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\orange.bmp" ;安裝時的背景圖 !define MUI_HEADERIMAGE_UNBITMAP "${NSISDIR}\Contrib\Graphics\Wizard\orange-uninstall-nsis.bmp" ;卸載時的背景圖 !define MUI_WELCOMEPAGE_TEXT " \r\n\r\nHELLO WORD。\r\n\r\n人生自是有情癡,此恨不關風與月\r\n\r\n $_CLICK" ;安裝時的歡迎語 !define MUI_FINISHPAGE_TITLE "\r\n 曾經滄海難為水,除卻巫山不是云" ;安裝完成時的結束語……; 歡迎頁面 !insertmacro MUI_PAGE_WELCOME ; 許可協議頁面 ;!insertmacro MUI_PAGE_LICENSE "c:\path\to\licence\YourSoftwareLicence.txt" ; 安裝過程頁面 !insertmacro MUI_PAGE_INSTFILES ; 安裝完成頁面 !define MUI_FINISHPAGE_RUN "${INSTDIR}\${PRODUCT_EXE}" !insertmacro MUI_PAGE_FINISH; 安裝卸載過程頁面 !insertmacro MUI_UNPAGE_INSTFILES; 安裝界面包含的語言設置 !insertmacro MUI_LANGUAGE "SimpChinese";VIProductVersion "${PRODUCT_VERSION}" ;設置安裝程序屬性中詳細信息中的字段 ;VIAddVersionKey /LANG=${LANG_SimpChinese} "ProductName" "急支糖漿1" ;VIAddVersionKey /LANG=${LANG_SimpChinese} "Comments" "急支糖漿2" ;VIAddVersionKey /LANG=${LANG_SimpChinese} "CompanyName" "急支糖漿3" ;VIAddVersionKey /LANG=${LANG_SimpChinese} "LegalTrademarks" "" ;VIAddVersionKey /LANG=${LANG_SimpChinese} "LegalCopyright" "急支糖漿4" ;VIAddVersionKey /LANG=${LANG_SimpChinese} "FileDescription" "急支糖漿5" ;VIAddVersionKey /LANG=${LANG_SimpChinese} "FileVersion" "${PRODUCT_VERSION}" ;VIAddVersionKey /LANG=${LANG_SimpChinese} "ProductVersion" "${PRODUCT_VERSION}"; 安裝預釋放文件 !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ; ------ MUI 現代界面定義結束 ------Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "${PRODUCT_OUTPUT}" InstallDir "${PRODUCT_SETUP}" ShowInstDetails show ShowUnInstDetails showSection "MainSection" SEC01SetOutPath "$INSTDIR"SetOverwrite on ;安裝時是否覆蓋File /r "jizhitangjiang\*.*" ;可以設置相對路徑CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\${PRODUCT_EXE}" ;生成桌面快捷方式 SectionEndSection -AdditionalIconsWriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$INSTDIR\uninst.exe" 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}" SectionEnd;onInit該回調將會在當安裝程序接近完成初始化時調用,若函數調用了 Abort,則安裝程序立即退出。檢查程序是否正在運行 Function .onInit;關閉進程Push $R0CheckProc:Push ${PRODUCT_EXE}ProcessWork::existsprocessPop $R0IntCmp $R0 0 DoneMessageBox MB_OKCANCEL|MB_ICONSTOP "安裝程序檢測到 ${PRODUCT_NAME} 正在運行。$\r$\n$\r$\n點擊 “確定” 強制關閉${PRODUCT_NAME},繼續安裝。$\r$\n點擊 “取消” 退出安裝程序。" IDCANCEL ExitPush "flighty.exe"Processwork::KillProcessSleep 1000Goto CheckProcExit:AbortDone:Pop $R0 FunctionEnd/******************************* 以下是安裝程序的卸載部分 *******************************/Section UninstallDelete "$INSTDIR\${PRODUCT_NAME}.url"Delete "$INSTDIR\uninst.exe"Delete "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk"Delete "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk"Delete "$DESKTOP\${PRODUCT_NAME}.lnk"RMDir "$SMPROGRAMS\${PRODUCT_NAME}"RMDir /r "$INSTDIR\web_content"RMDir /r "$INSTDIR\translations"RMDir /r "$INSTDIR\swiftshader"RMDir /r "$INSTDIR\sqldrivers"RMDir /r "$INSTDIR\playlistformats"RMDir /r "$INSTDIR\platforms"RMDir /r "$INSTDIR\mediaservice"RMDir /r "$INSTDIR\locales"RMDir /r "$INSTDIR\imageformats"RMDir /r "$INSTDIR\iconengines"RMDir /r "$INSTDIR\bearer"RMDir /r "$INSTDIR\audio"RMDir /r "$INSTDIR" ;刪除所有RMDir /r "$INSTDIR/*.*"DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"SetAutoClose true SectionEnd#-- 根據 NSIS 腳本編輯規則,所有 Function 區段必須放置在 Section 區段之后編寫,以避免安裝程序出現未可預知的問題。--# ;該回調將會在當卸載程序接近完成初始化時調用,若函數使用了 Abort ,則卸載程序立即退出。檢查程序是否正在運行 Function un.onInitMessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您確實要完全移除 $(^Name) ,及其所有的組件?" IDYES +2Abort;檢測程序是否運行FindProcDLL::FindProc "flighty.exe"Pop $R0IntCmp $R0 1 0 no_runMessageBox MB_ICONSTOP "卸載程序檢測到 ${PRODUCT_NAME} 正在運行,請關閉之后再卸載!"Quitno_run: FunctionEndFunction un.onUninstSuccessHideWindowMessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地從您的計算機移除。" FunctionEnd總結
- 上一篇: Proguard 混淆之乱谈 3 混淆模
- 下一篇: nsis 工具介绍