一. 准備工作
下載nsis相關工具包,點擊此下載
1. 安裝程序:nsis-2.46-setup.exe
2. 編輯程序:cnisedit203.exe
3. 幫助文檔:NSIS205幫助文檔.rar
4. 第三方庫:ExecCmd.dll、AddPath.nsh、WriteEnvStr.nsh
二. 安裝nsis-2.4.6-setup.exe
1. 安裝完后,右鍵nsi格式的文件,如果沒有出現Compile NSIS Script和Compile NSIS Script(Choose Compressor)兩個選項,
可嘗試右鍵nsi格式文件---屬性---常規---更改打開方式為記事本。
2. 將ExecCmd.dll復制到"NSIS安裝路徑\Plugins"下
三. 制作nsi打包腳本:ims1.0.0-jdk1.6.0_21&tomcat6.0.33.nsi

; Script generated by the HM NIS Edit Script Wizard. ;------------------------------常量定義------------------------------- ;定義產品名稱常量 !define PRODUCT_NAME "企業信息管理系統" ;定義產品版本常量 !define PRODUCT_VERSION "1.0.0" ;定義發布公司名稱常量 !define PRODUCT_PUBLISHER "ims" ;定義產品發布公司網址常量 !define PRODUCT_WEB_SITE "http://www.ims.com" ;定義反安裝鍵值常量 !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" ;定義反安裝ROOT鍵值常量 !define PRODUCT_UNINST_ROOT_KEY "HKLM" ;定義開機自動啟動ROOT鍵值常量 !define PRODUCT_AUTORUN_ROOT_KEY "HKCU" ;定義開機自動啟動鍵值常量 !define PRODUCT_AUTORUN_KEY "Software\Microsoft\Windows\CurrentVersion\Run" ;定義系統訪問地址 !define URL "http://localhost:8080/ims/index.html" ;應用路徑常量 !define APP_CATALOG "app" ;資源路徑常量 !define RESOURCE_CATALOG "resource" ;目標路徑常量 !define TARGET_CATALOG "target" ;定義JDK資源存放路徑常量 !define JDK_RESOURCE_CATALOG "java\jdk1.6.0_21" ;定義TOMCAT的資源存放路徑常量 !define TOMCAT_RESOURCE_CATALOG "container\apache-tomcat-6.0.33" ;定義MYSQL的資源存放路徑常量 !define MYSQL_RESOURCE_CATALOG "db\mysql-server-5.1" ;定義數據存放路徑常量 !define DATA_RESOURCE_CATALOG "data" ;定義圖標存放路徑常量 !define ICON_RESOURCE_CATALOG "icon" ;定義JAVA_HOME常量常量 !define JAVA_HOME "$INSTDIR\${JDK_RESOURCE_CATALOG}" ;定義CATALINA_HOME常量常量 !define CATALINA_HOME "$INSTDIR\${TOMCAT_RESOURCE_CATALOG}" ;定義MYSQL_HOME常量常量 !define MYSQL_HOME "$INSTDIR\${MYSQL_RESOURCE_CATALOG}" ;------------------------------第三方庫導入------------------------------- ; MUI 1.67 compatible ------ !include "MUI.nsh" ;導入打包程序第三方庫 !include "third\AddPath.nsh" !include "third\WriteEnvStr.nsh" ;------------------------------圖標定義------------------------------- ; MUI Settings !define MUI_ABORTWARNING !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\orange-install.ico" !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\orange-uninstall.ico" ;------------------------------安裝步驟向導界面定義------------------------------- ;歡迎頁面 !insertmacro MUI_PAGE_WELCOME ;授權頁面 !insertmacro MUI_PAGE_LICENSE "..\${RESOURCE_CATALOG}\licence.txt" ;目錄選擇頁面 !insertmacro MUI_PAGE_DIRECTORY ;安裝頁面 !insertmacro MUI_PAGE_INSTFILES ;完成頁面 !insertmacro MUI_PAGE_FINISH ;反安裝頁面 !insertmacro MUI_UNPAGE_INSTFILES ;語言選擇 !insertmacro MUI_LANGUAGE "SimpChinese" ;------------------------------打包后安裝文件名/輸出路徑/安裝路徑定義------------------------------- ;產品名稱及產品版本 Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" ;輸出文件名稱 OutFile "..\${TARGET_CATALOG}\${PRODUCT_NAME}-${PRODUCT_VERSION}.exe" ;程序安裝路徑 InstallDir "$PROGRAMFILES\ims1.0.0" ;顯示安裝進度 ShowInstDetails show ;顯示反安裝進度 ShowUnInstDetails show ;------------------------------提示對話框定義------------------------------- ;安裝前提示 Function .onInit MessageBox MB_YESNO "請先確認該電腦上沒有安裝JDK、Apache Tomcat、Mysql軟件。是否繼續?" IDYES NoAbort Abort NoAbort: FunctionEnd ;安裝失敗提示 Function .onInstFailed MessageBox MB_OK "安裝失敗,請檢查您的系統環境。" FunctionEnd ;反安裝成功提示 Function un.onUninstSuccess HideWindow MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地從您的計算機移除。" FunctionEnd ;反安裝提示 Function un.onInit MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您確實要完全移除 $(^Name) ,其及所有的組件?" IDYES +2 Abort FunctionEnd ;------------------------------菜單以及注冊表信息注冊------------------------------- ;菜單注冊 Section -AdditionalIcons SetOutPath $INSTDIR ;WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}" CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "${URL}" CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$INSTDIR\uninst.exe" ;CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "${URL}" "" "$INSTDIR\icon\ims.ico" SectionEnd ;注冊表注冊 Section -Post WriteRegStr ${PRODUCT_AUTORUN_ROOT_KEY} "${PRODUCT_AUTORUN_KEY}" "${PRODUCT_NAME}" "${CATALINA_HOME}\bin\runbat.vbs" WriteUninstaller "$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 ;------------------------------資源復制打包------------------------------- ;將JDK_RESOURCE_CATALOG下的所有文件資源拷貝至安裝目錄下 Section "JDK_RESOURCE_COPY" SEC01 sectionin 1 sectionin RO SetOutPath "$INSTDIR\${JDK_RESOURCE_CATALOG}" SetOverwrite try File /r "..\${RESOURCE_CATALOG}\${JDK_RESOURCE_CATALOG}\*.*" SectionEnd ;將TOMCAT_RESOURCE_CATALOG下的所有文件資源拷貝至安裝目錄下 Section "TOMCAT_RESOURCE_COPY" SEC02 sectionin 1 sectionin RO SetOutPath "$INSTDIR\${TOMCAT_RESOURCE_CATALOG}" SetOverwrite try File /r "..\${RESOURCE_CATALOG}\${TOMCAT_RESOURCE_CATALOG}\*.*" SectionEnd ;將MYSQL_RESOURCE_CATALOG下的所有文件資源拷貝至安裝目錄下 Section "MYSQL_RESOURCE_COPY" SEC03 sectionin 1 sectionin RO SetOutPath "$INSTDIR\${MYSQL_RESOURCE_CATALOG}" SetOverwrite try File /r "..\${RESOURCE_CATALOG}\${MYSQL_RESOURCE_CATALOG}\*.*" ;設置初始化SQL文件路徑 WriteINIStr "${MYSQL_HOME}\my.ini" mysqld "init-file" '"${MYSQL_HOME}\init.sql"' WriteINIStr "${MYSQL_HOME}\my.ini" mysqld "basedir" '"${MYSQL_HOME}"' WriteINIStr "${MYSQL_HOME}\my.ini" mysqld "datadir" '"$INSTDIR\${DATA_RESOURCE_CATALOG}\mysql"' FlushINI "${MYSQL_HOME}\my.ini" SectionEnd ;將DATA_RESOURCE_COPY下的所有文件資源拷貝至安裝目錄下 Section "DATA_RESOURCE_COPY" SEC04 sectionin 1 sectionin RO SetOutPath "$INSTDIR\${DATA_RESOURCE_CATALOG}" SetOverwrite try File /r "..\${DATA_RESOURCE_CATALOG}\*.*" SectionEnd ;將ICON_RESOURCE_COPY下的所有文件資源拷貝至安裝目錄下 Section "ICON_RESOURCE_COPY" SEC06 sectionin 1 sectionin RO SetOutPath "$INSTDIR\${ICON_RESOURCE_CATALOG}" SetOverwrite try File /r "..\${RESOURCE_CATALOG}\${ICON_RESOURCE_CATALOG}\*.*" CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "${URL}" "" "$INSTDIR\icon\ims.ico" SectionEnd ;將APP_RESOURCE_COPY下的所有文件資源拷貝至安裝目錄下 Section "APP_RESOURCE_COPY" SEC07 sectionin 1 sectionin RO SetOutPath "$INSTDIR\${TOMCAT_RESOURCE_CATALOG}\webapps" SetOverwrite try File /r "..\${APP_CATALOG}\*.*" SectionEnd ;------------------------------環境變量注冊及反注冊------------------------------- ;注冊環境變量 Section -EnvironmentVariables ;JDK安裝根路徑 Push JAVA_HOME Push '${JAVA_HOME}' Call WriteEnvStr Push '${JAVA_HOME}\bin' Call AddToPath ;TOMCAT安裝根路徑 Push CATALINA_HOME Push '${CATALINA_HOME}' Call WriteEnvStr Push '${CATALINA_HOME}\bin' Call AddToPath ;MySQL安裝根路徑 Push MYSQL_HOME Push '${MYSQL_HOME}' Call WriteEnvStr Push '${MYSQL_HOME}\bin' Call AddToPath SectionEnd ;反注冊環境變量 Function un.removeEnvPath Push JAVA_HOME Call un.DeleteEnvStr Push '${JAVA_HOME}\bin' Call un.RemoveFromPath Push CATALINA_HOME Call un.DeleteEnvStr Push '${CATALINA_HOME}\bin' Call un.RemoveFromPath Push MYSQL_HOME Call un.DeleteEnvStr Push '${MYSQL_HOME}\bin' Call un.RemoveFromPath FunctionEnd ;------------------------------服務的安裝/啟動/停止/反安裝------------------------------- ;安裝並啟動后台服務 Section -Service Call InstallMySQLService Call InstallTomcatService Call startMySQLService Call startTomcatProcess SectionEnd ;安裝TOMCAT服務 Function InstallTomcatService SetOutPath "$INSTDIR\${TOMCAT_RESOURCE_CATALOG}\bin" ExecCmd::exec /TIMEOUT=10000 "service.bat install" FunctionEnd ;安裝MYSQL服務 Function InstallMySQLService ExecWait "$INSTDIR\${MYSQL_RESOURCE_CATALOG}\bin\mysqld -install" FunctionEnd ;啟動TOMCAT進程 Function startTomcatProcess SetOutPath "${CATALINA_HOME}\bin" nsExec::Exec /TIMEOUT=120000 '"$SYSDIR\cscript.exe" "${CATALINA_HOME}\bin\runbat.vbs"' FunctionEnd ;啟動MySQL服務 Function startMySQLService ExecCmd::exec /TIMEOUT=60000 "net start MySQL" Sleep 1500 SetOutPath "$INSTDIR\${MYSQL_RESOURCE_CATALOG}\bin" Sleep 1500 ExecCmd::exec /TIMEOUT=60000 "mysql.exe -uroot -p123456 <ims.sql" FunctionEnd ;停止TOMCAT服務 Function un.stopTomcatService ExecCmd::exec /TIMEOUT=120000 "net stop Tomcat6" FunctionEnd ;停止MySQL服務 Function un.stopMySQLService ExecCmd::exec /TIMEOUT=20000 "net stop MySQL" FunctionEnd ;刪除TOMCAT服務 function un.removeTomcatService SetOutPath "$INSTDIR\${TOMCAT_RESOURCE_CATALOG}\bin" ExecCmd::exec /TIMEOUT=120000 "service.bat remove" functionend ;刪除MySQL服務 function un.removeMySQLService ExecWait "$INSTDIR\${MYSQL_RESOURCE_CATALOG}\bin\mysqld -remove" functionend ;------------------------------反安裝------------------------------- Section Uninstall ExecCmd::exec /TIMEOUT=120000 "taskkill /im tomcat6.exe /f" Call un.stopTomcatService Call un.stopMySQLService Call un.removeTomcatService Call un.removeMySQLService Delete "$DESKTOP\${PRODUCT_NAME}.lnk" Delete "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" Delete "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" RMDir "$SMPROGRAMS\${PRODUCT_NAME}" Delete "$INSTDIR\${PRODUCT_NAME}.url" Delete "$INSTDIR\uninst.exe" RMDir /r "$INSTDIR" DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" DeleteRegValue ${PRODUCT_AUTORUN_ROOT_KEY} "${PRODUCT_AUTORUN_KEY}" "${PRODUCT_NAME}" Call un.removeEnvPath SetAutoClose true SectionEnd
四. 編譯前准備
1. 新建resource、target、script三個文件夾
2. 將jdk1.6.0_21、tomcat6.0.33放置到resource文件夾下
3. 創建licence.txt文件,放置到resource文件夾下
4. 將ims1.0.0-jdk1.6.0_21&tomcat6.0.33.nsi放置到script文件夾下
5. 在script下新建third文件夾,將AddPath.nsh、WriteEnvStr.nsh放置到該文件夾下
五. 編譯nsi腳本
右鍵nsi腳本,選擇Compile NSIS Script進行編譯,最終在target目錄下生成exe安裝包。