1、脚本
; 该脚本使用 HM VNISEdit 脚本编辑器向导产生 ; 安装程序初始定义常量 !define PRODUCT_NAME "查询系统" !define PRODUCT_VERSION "1.0" !define PRODUCT_PUBLISHER "xxxxxx有限公司." !define PRODUCT_WEB_SITE "http://www.mycompany.com" !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\tomcat6.exe" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM" ; 定义系统环境变量的 注册表key值 !define WriteEnvStr_RegKey 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' ; 定义系统JAVA环境变量 !define SysJavaHome "JAVA_HOME2" SetCompressor lzma ; ------ MUI 现代界面定义 (1.67 版本以上兼容) ------ !include "WordFunc.nsh" !include "MUI.nsh" ; MUI 预定义常量 !define MUI_ABORTWARNING !define MUI_ICON "..\ico\az.ico" !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" ; 欢迎页面 !insertmacro MUI_PAGE_WELCOME ; 许可协议页面 !define MUI_LICENSEPAGE_CHECKBOX !insertmacro MUI_PAGE_LICENSE "..\Licence.txt" ; 安装目录选择页面 !insertmacro MUI_PAGE_DIRECTORY ; 安装过程页面 !insertmacro MUI_PAGE_INSTFILES ; 安装完成页面 !define MUI_FINISHPAGE_RUN "http://localhost:8080/sxczt" !insertmacro MUI_PAGE_FINISH ; 安装卸载过程页面 !insertmacro MUI_UNPAGE_INSTFILES ; 安装界面包含的语言设置 !insertmacro MUI_LANGUAGE "SimpChinese" ; 安装预释放文件 !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ; ------ MUI 现代界面定义结束 ------ Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "Setup.exe" InstallDir "$PROGRAMFILES\sxczt" InstallDirRegKey HKLM "${PRODUCT_UNINST_KEY}" "UninstallString" ShowInstDetails show ShowUnInstDetails show BrandingText "软件研发部" ;安装文件路径 Section "sxczt" SEC01 SetOutPath "$INSTDIR\apache-tomcat-6.0.36\bin" SetOverwrite ifnewer File "..\lanmu\apache-tomcat-6.0.36\bin\bootstrap.jar" ........ ........ SetOutPath "$INSTDIR" File "..\lanmu\查询系统.url" CreateDirectory "$SMPROGRAMS\查询系统" CreateShortCut "$SMPROGRAMS\查询系统\查询系统.lnk" "$INSTDIR\查询系统.url" CreateShortCut "$DESKTOP\查询系统.lnk" "$INSTDIR\查询系统.url" SectionEnd ;安装文成以后操作 Section -AdditionalIcons SetOutPath $INSTDIR #安装服务 Call regExpandStr call installService call startService WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" CreateShortCut "$SMPROGRAMS\查询系统\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url" CreateShortCut "$SMPROGRAMS\查询系统\Uninstall.lnk" "$INSTDIR\uninst.exe" SectionEnd Section -Post WriteUninstaller "$INSTDIR\uninst.exe" WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\apache-tomcat-6.0.36\bin\tomcat6.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}" "DisplayIcon" "$INSTDIR\apache-tomcat-6.0.36\bin\tomcat6.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 /****************************** * 以下是安装程序的卸载部分 * ******************************/ Section Uninstall #开始停止/卸载服务 call un.stopService call un.uninstService Call un.emptyRegExpandStr Delete "$INSTDIR\${PRODUCT_NAME}.url" Delete "$INSTDIR\uninst.exe" ................ ................ RMDir "$INSTDIR" DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" SetAutoClose true SectionEnd #-- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--# Function un.onInit MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您确实要完全移除 $(^Name) ,及其所有的组件?" IDYES +2 Abort FunctionEnd Function un.onUninstSuccess HideWindow MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从您的计算机移除。" FunctionEnd ;设置环境变量 Function "regExpandStr" SetOverwrite ifnewer ;设置jdk环境变量 WriteRegExpandStr ${WriteEnvStr_RegKey} ${SysJavaHome} "$INSTDIR\Java\jdk1.6.0_10" ;设置catalina_home ;WriteRegExpandStr ${WriteEnvStr_RegKey} "CATALINA_HOME" "$INSTDIR\tomcat" #第一次是使环境变量修改对其他进程有效;刷新环境变量 ##SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 ;写入Path环境变量 把JAVA_HOME2写入path变量 ReadRegStr $0 ${WriteEnvStr_RegKey} "Path" WriteRegExpandStr ${WriteEnvStr_RegKey} "Path" "$0;%${SysJavaHome}%\bin" ;刷新环境变量 SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 SetOverwrite on functionend ;注册服务 Function "installService" detailprint "install tomcal Service..." Sleep 2000 SetOutPath "$INSTDIR\apache-tomcat-6.0.36\bin" nsExec::Exec 'cmd /c service install tomcat6' nsExec::Exec 'cmd /c sc config tomcat6 start= auto' detailprint "install tomcat Service success..." detailprint "install tomcat Service..." functionend ; 启动服务 Function "startService" detailprint "start tomcat..." nsExec::Exec 'cmd /c sc start tomcat6' detailprint "start tomcat success..." functionend ;停止服务 Function "un.stopService" detailprint "正在停止tomcat服务......." nsExec::Exec 'cmd /c sc stop tomcat6' detailprint "停止tomcat服务成功......." functionend ;删除服务 Function "un.uninstService" detailprint "正在卸载tomcat服务......." nsExec::Exec 'cmd /c sc delete tomcat6' detailprint "卸载tomcat服务成功......." functionend ;清空环境变量删除 Function "un.emptyRegExpandStr" DeleteRegValue ${WriteEnvStr_RegKey} ${SysJavaHome} Sleep 2000 ;读取出环境变量的Value ReadRegStr $0 ${WriteEnvStr_RegKey} "Path" ;将PATH中的环境变量删除 ${WordReplace} $0 ";%${SysJavaHome}%\bin" "" "+" $0 ;将新的path值写入环境变量 WriteRegExpandStr ${WriteEnvStr_RegKey} "Path" "$0" ;刷新环境变量 SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" #删除 系统环境变量JAVA_HOME 和 CATALINA_HOME #卸载的时候必须设置JAVA_HOME 和 CATALINA_HOME两个环境系统变量为空,或者删除这两个系统变量。否则会出现NSIS选择系统变量的错误(NSIS会自动选择之前有值的系统变量,而不是选择当前刚设置的系统变量) ##detailprint "正在删除相关环境变量......." ##WriteRegExpandStr ${WriteEnvStr_RegKey} "JAVA_HOME2" "" ##sleep 1000 ;设置TOMCAT环境变量CATALINA_HOME ##WriteRegExpandStr ${WriteEnvStr_RegKey} "CATALINA_HOME" "" functionend
2、
;设置环境变量 Function "regExpandStr" SetOverwrite ifnewer ;设置jdk环境变量 WriteRegExpandStr ${WriteEnvStr_RegKey} ${SysJavaHome} "$INSTDIR\Java\jdk1.6.0_10" ;设置catalina_home ;WriteRegExpandStr ${WriteEnvStr_RegKey} "CATALINA_HOME" "$INSTDIR\tomcat" #第一次是使环境变量修改对其他进程有效;刷新环境变量 ##SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 ;写入Path环境变量 把JAVA_HOME2写入path变量 ReadRegStr $0 ${WriteEnvStr_RegKey} "Path" WriteRegExpandStr ${WriteEnvStr_RegKey} "Path" "$0;%${SysJavaHome}%\bin" ;刷新环境变量 SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 SetOverwrite on functionend ;注册服务 Function "installService" detailprint "install tomcal Service..." Sleep 2000 SetOutPath "$INSTDIR\apache-tomcat-6.0.36\bin" nsExec::Exec 'cmd /c service install tomcat6' nsExec::Exec 'cmd /c sc config tomcat6 start= auto' detailprint "install tomcat Service success..." detailprint "install tomcat Service..." functionend ; 启动服务 Function "startService" detailprint "start tomcat..." nsExec::Exec 'cmd /c sc start tomcat6' detailprint "start tomcat success..." functionend ;停止服务 Function "un.stopService" detailprint "正在停止tomcat服务......." nsExec::Exec 'cmd /c sc stop tomcat6' detailprint "停止tomcat服务成功......." functionend ;删除服务 Function "un.uninstService" detailprint "正在卸载tomcat服务......." nsExec::Exec 'cmd /c sc delete tomcat6' detailprint "卸载tomcat服务成功......." functionend ;清空环境变量删除 Function "un.emptyRegExpandStr" DeleteRegValue ${WriteEnvStr_RegKey} ${SysJavaHome} Sleep 2000 ;读取出环境变量的Value ReadRegStr $0 ${WriteEnvStr_RegKey} "Path" ;将PATH中的环境变量删除 ${WordReplace} $0 ";%${SysJavaHome}%\bin" "" "+" $0 ;将新的path值写入环境变量 WriteRegExpandStr ${WriteEnvStr_RegKey} "Path" "$0" ;刷新环境变量 SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" #删除 系统环境变量JAVA_HOME 和 CATALINA_HOME #卸载的时候必须设置JAVA_HOME 和 CATALINA_HOME两个环境系统变量为空,或者删除这两个系统变量。否则会出现NSIS选择系统变量的错误(NSIS会自动选择之前有值的系统变量,而不是选择当前刚设置的系统变量) ##detailprint "正在删除相关环境变量......." ##WriteRegExpandStr ${WriteEnvStr_RegKey} "JAVA_HOME2" "" ##sleep 1000 ;设置TOMCAT环境变量CATALINA_HOME ##WriteRegExpandStr ${WriteEnvStr_RegKey} "CATALINA_HOME" "" functionend
参考地址:http://vimesly.iteye.com/blog/838692