123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484 |
- # 安装包防解压
- !packhdr temp.dat "cmd /c Copy /B temp.dat /B +Nanlon.7z temp.dat"
- #=================================================================
- /************************
- * 引入 nsh 脚本
- ************************/
- # 头文件目录
- !addincludedir ".\Include"
- !include "MUI2.nsh"
- !include "x64.nsh"
- /************************
- * 安装程序初始定义常量
- ************************/
- !define APPNAME "wlt"
- !define PRODUCT_NAME "wlt"
- !define PRODUCT_VERSION "5.0.1.0"
- !define PRODUCT_PUBLISHER "aaaaaa"
- !define PRODUCT_WEBSITE ""
- !define WEBSITE_LINK ""
- !define APPNAMESRT "王老头加速器"
- # 定义注册表
- !define PRODUCT_KEY_ROOT "HKLM"
- !define PRODUCT_KEY_UNINST "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
- !define PRODUCT_KEY_APPDIR "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\${APPNAME}.exe"
- /************************
- * 初始化定义变量
- ************************/
- # 声明变量
- Var BIT
- Var BITSUFFIX
- # 标题
- Caption "${PRODUCT_NAME} ${PRODUCT_VERSION} $BITSUFFIX"
- # 设置文件覆盖标记
- SetOverwrite try
- # 设置压缩选项
- SetCompress auto
- # 选择压缩方式
- SetCompressor /SOLID lzma
- SetCompressorDictSize 32
- # 设置数据块优化
- SetDatablockOptimize on
- # 设置在数据中写入文件时间
- SetDateSave on
- # 请求应用程序管理员权限
- RequestExecutionLevel admin
- # 是否允许安装在根目录下
- AllowRootDirInstall false
- # 设置是否显示安装详细信息
- ShowInstDetails hide
- # 设置是否显示卸载详细信息
- ShowUnInstDetails hide
- # 设置安装类型
- InstType "推荐安装"
- InstType "全部安装"
- /************************
- * MUI 预定义常量
- ************************/
- !define MUI_UI ".\Resource\mui_sdesc.exe"
- /*** 安装界面 ***/
- !define MUI_ICON ".\Resource\Install.ico"
- !define MUI_WELCOMEFINISHPAGE_BITMAP ".\Resource\nsis3-grey.bmp"
- !define MUI_FINISHPAGE_RUN "$INSTDIR\${APPNAME}.exe"
- !define MUI_FINISHPAGE_RUN_TEXT "运行 ${PRODUCT_NAME}"
- /*** 卸载界面 ***/
- !define MUI_UNICON ".\Resource\Uninst.ico"
- !define MUI_UNWELCOMEFINISHPAGE_BITMAP ".\Resource\nsis3-grey.bmp"
- /************************
- * 安装/卸载 页面设置
- ************************/
- /*** 加快载入界面资源 ***/
- ReserveFile ".\Resource\Install.ico"
- ReserveFile ".\Resource\nsis3-grey.bmp"
- # 插件目录
- !ifdef NSIS_PACKEDVERSION
- !define /math NSIS_VERSON_MAJOR ${NSIS_PACKEDVERSION} >> 24
- !else
- !define NSIS_VERSON_MAJOR 2
- !endif
- !if ${NSIS_VERSON_MAJOR} > 2
- # NSIS 3.x 方式引用插件
- !addplugindir "/x86-unicode" ".\Plugins\x86-unicode"
- !addplugindir "/x86-ansi" ".\Plugins\x86-ansi"
- !else
- # NSIS 2.x 方式引用插件
- !ifdef NSIS_UNICODE
- !addplugindir ".\Plugins\x86-unicode"
- !else
- !addplugindir ".\Plugins\x86-ansi"
- !endif
- !endif
- # dll
- ReserveFile /plugin "System.dll"
- ReserveFile /plugin "Process.dll"
- /*** 安装页面 ***/
- # 欢迎页面
- !insertmacro MUI_PAGE_WELCOME
- # 组件选择页面
- !insertmacro MUI_PAGE_COMPONENTS
- # 安装目录选择页面
- !define MUI_PAGE_CUSTOMFUNCTION_show OnDirPageshow
- !insertmacro MUI_PAGE_DIRECTORY
- # 安装过程页面
- !insertmacro MUI_PAGE_INSTFILES
- # 安装完成页面
- !insertmacro MUI_PAGE_FINISH
- /*** 卸载页面 ***/
- # 卸载欢迎页面
- !insertmacro MUI_UNPAGE_WELCOME
- # 卸载目录选择页面
- !insertmacro MUI_UNPAGE_DIRECTORY
- # 卸载过程页面
- !insertmacro MUI_UNPAGE_INSTFILES
- # 卸载完成页面
- !insertmacro MUI_UNPAGE_FINISH
- /*** 语言文件 ***/
- !insertmacro MUI_LANGUAGE "SimpChinese"
- /************************
- * 版本声明
- ************************/
- VIProductVersion "${PRODUCT_VERSION}"
- VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "ProductName" "${PRODUCT_NAME}"
- VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "Comments" "${PRODUCT_NAME}"
- VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "LegalCopyright" "Copyright ? 2017 ${PRODUCT_PUBLISHER}"
- VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "FileDescription" "${PRODUCT_NAME}"
- VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "FileVersion" "${PRODUCT_VERSION}"
- VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "ProductVersion" "${PRODUCT_VERSION}"
- /************************
- * 安装文件定义
- ************************/
- Name "${PRODUCT_NAME}"
- OutFile "${PRODUCT_NAME}_${PRODUCT_VERSION}.exe"
- InstallDir "$PROGRAMFILES64\${PRODUCT_NAME}"
- InstallDirRegKey HKLM "${PRODUCT_UNINST_KEY}" "UninstallString"
- BrandingText " ${WEBSITE_LINK}"
- /************************
- * 安装 Section 段
- ************************/
- !macro ProcessCleanup # 进程清理
- ProcessFindLoop:
- Process::Find "$INSTDIR\${APPNAME}.exe"
- Pop $R0
- IntCmp $R0 0 ProcessFindDone
- Process::Kill $R0
- Pop $R1
- IntCmp $R1 0 ProcessFindDone
- Goto ProcessFindLoop
- ProcessFindDone:
- !macroend
- !macro AddUninstReg
- # 将卸载信息写入注册表
- WriteRegStr HKLM "${PRODUCT_KEY_UNINST}" "DisplayName" "${PRODUCT_NAME} $BITSUFFIX"
- WriteRegStr HKLM "${PRODUCT_KEY_UNINST}" "UninstallString" "$INSTDIR\uninst.exe"
- WriteRegStr HKLM "${PRODUCT_KEY_UNINST}" "DisplayIcon" "$INSTDIR\${APPNAME}.exe"
- WriteRegStr HKLM "${PRODUCT_KEY_UNINST}" "DisplayVersion" "${PRODUCT_VERSION}"
- WriteRegStr HKLM "${PRODUCT_KEY_UNINST}" "URLInfoAbout" "${PRODUCT_WEBSITE}"
- WriteRegStr HKLM "${PRODUCT_KEY_UNINST}" "Publisher" "${PRODUCT_PUBLISHER}"
- # 获取安装段的大小(KB)写入注册表
- SectionGetSize ${CoreFiles} $R0
- WriteRegDWORD HKLM "${PRODUCT_KEY_UNINST}" "EstimatedSize" "$R0"
- WriteRegStr HKLM "${PRODUCT_KEY_APPDIR}" "" "$INSTDIR\${APPNAME}.exe"
- SetRegView lastused
- !macroend
- Section "主程序(必选)" CoreFiles
-
- SectionIn RO 1 2
-
- SetDetailsPrint textonly
- DetailPrint "正在安装${PRODUCT_NAME}..."
- SetDetailsPrint listonly
-
- # 进程清理
- !insertmacro ProcessCleanup
-
- SetOutPath "$INSTDIR"
-
- ${If} ${RunningX64}
- File /r ".\${PRODUCT_NAME}\x64\*.*"
-
- ${Else}
- File /r ".\${PRODUCT_NAME}\x86\*.*"
-
- ${EndIf}
-
- WriteUninstaller "$INSTDIR\uninst.exe"
-
- SectionEnd
- SectionGroup /e "快捷方式" Shortcuts
-
- Section "桌面" ShortcutsDesktop
-
- SectionIn 1 2
-
- SetDetailsPrint textonly
- DetailPrint "正在创建桌面快捷方式..."
- SetDetailsPrint listonly
-
- SetShellVarContext current
- CreateShortCut "$DESKTOP\${APPNAMESRT}.lnk" "$INSTDIR\${APPNAME}.exe"
-
- SectionEnd
- ; Section "开始菜单" ShortcutsPrograms
-
- ; SectionIn 1 2
-
- ; SetDetailsPrint textonly
- ; DetailPrint "正在创建桌开始菜单目录..."
- ; SetDetailsPrint listonly
-
- ; SetShellVarContext current
- ; CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
- ; CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe"
- ; CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\卸载${APPNAME}.lnk" "$INSTDIR\uninst.exe"
-
- ; SectionEnd
- SectionGroupEnd
- ; Section "添加到系统右键菜单" AddSystemContextMenu
-
- ; SectionIn 1 2
-
- ; SetDetailsPrint textonly
- ; DetailPrint "正在添加系统右键菜单..."
- ; SetDetailsPrint listonly
-
- ; WriteRegStr HKCR "*\shell\${APPNAME}" "" "使用${PRODUCT_NAME}编辑"
- ; WriteRegStr HKCR "*\shell\${APPNAME}\command" "" `"$INSTDIR\${APPNAME}.exe" "%1"`
-
- ; SectionEnd
- ; Section "替换系统记事本程序" ReplaceSystemNotepad
-
- ; SectionIn 2
-
- ; SetDetailsPrint textonly
- ; DetailPrint "正在替换系统记事本程序..."
- ; SetDetailsPrint listonly
-
- ; ${If} ${RunningX64}
- ; SetRegView 64
- ; WriteRegStr HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" "Debugger" `"$INSTDIR\${APPNAME}.exe" "/z"`
- ; SetRegView lastused
-
- ; ${Else}
- ; SetRegView 32
- ; WriteRegStr HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" "Debugger" `"$INSTDIR\${APPNAME}.exe" "/z"`
- ; SetRegView lastused
-
- ; ${EndIf}
-
- ; SectionEnd
- Section -Post
-
- SetDetailsPrint textonly
- DetailPrint "正在注册文件..."
- SetDetailsPrint listonly
-
- ${If} ${RunningX64}
- SetRegView 64
- !insertmacro AddUninstReg
- SetRegView lastused
-
- ${Else}
- SetRegView 32
- !insertmacro AddUninstReg
- SetRegView lastused
-
- ${EndIf}
-
- # 刷新图标关联
- System::Call `shell32::SHChangeNotify(i 0x08000000, i 0, i 0, i 0)`
-
- SectionEnd
- /************************
- * 安装回调函数
- ************************/
-
- Function .onInit
- # 初始化插件目录
- InitPluginsDir
- File "/ONAME=$PluginsDIR\Install.ico" ".\Resource\Install.ico"
- File "/ONAME=$PluginsDIR\nsis3-grey.bmp" ".\Resource\nsis3-grey.bmp"
- # 系统版本位数检测
- ${If} ${RunningX64}
- StrCpy $BIT "64"
- StrCpy $BITSUFFIX "(64-bit)"
- ${Else}
- StrCpy $BIT ""
- StrCpy $BITSUFFIX ""
- ${EndIf}
-
- # 创建互斥防止重复运行
- System::Call `kernel32::CreateMutex(i 0, i 0, t "${PRODUCT_NAME}_installer") i .r1 ?e`
- Pop $R0
- StrCmp $R0 0 +3
- MessageBox MB_OK|MB_ICONEXCLAMATION "安装程序已经运行!"
- Abort
-
- # 旧版本检测及卸载
- SetRegView 64
- ClearErrors
- ReadRegStr $R0 HKLM "${PRODUCT_KEY_UNINST}" "UninstallString"
- ${Unless} ${Errors}
- ReadRegStr $R1 HKLM "${PRODUCT_KEY_UNINST}" "DisplayVersion"
- SetRegView lastused
- Goto Uninst
-
- ${EndUnless}
-
- SetRegView 32
- ClearErrors
- ReadRegStr $R0 HKLM "${PRODUCT_KEY_UNINST}" "UninstallString"
- ${Unless} ${Errors}
- ReadRegStr $R1 HKLM "${PRODUCT_KEY_UNINST}" "DisplayVersion"
- SetRegView lastused
-
- Uninst:
-
- ${AndUnless} ${Cmd} `MessageBox MB_YESNO|MB_ICONQUESTION "检测到本机已经安装了 ${APPNAME} v$R1 $\n$\n是否卸载已安装的版本?" /SD IDYES IDNO`
- System::Call "*(&t${NSIS_MAX_STRLEN}R0)p.r0"
- System::Call "shlwapi::PathParseIconLocation(pr0)"
- System::Call "shlwapi::PathRemoveFileSpec(pr0)"
- System::Call "*$0(&t${NSIS_MAX_STRLEN}.R2)"
- System::Free $0
- ${AndUnless} $R2 == ""
- ExecWait `"$R0" /S _?=$R2` $0
- ${EndUnless}
-
- FunctionEnd
- Function OnDirPageshow # 安装目录设置
- SetRegView 64
- ReadRegStr $0 HKLM "${PRODUCT_KEY_APPDIR}" ""
- SetRegView lastused
- ${If} $0 == ""
-
- SetRegView 32
- ReadRegStr $0 HKLM "${PRODUCT_KEY_APPDIR}" ""
- SetRegView lastused
- ${ElseIf} $0 != ""
-
- FindWindow $R0 "#32770" "" $HWNDPARENT
- # 禁用浏览按钮
- GetDlgItem $0 $R0 1001
- EnableWindow $0 0
- # 禁用编辑的目录
- GetDlgItem $0 $R0 1019
- EnableWindow $0 0
- GetDlgItem $0 $R0 1006
- SendMessage $0 ${WM_SETTEXT} 0 "STR:已经检测到您的计算机上安装了${PRODUCT_NAME},现在进行的覆盖安装不能更改安装目录。如果您需要更改安装目录,请先卸载已经安装的版本之后再运行此安装程序!"
- ${EndIf}
- FunctionEnd
- /************************
- * 区段组件描述
- ************************/
- !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
- !insertmacro MUI_DESCRIPTION_TEXT ${CoreFiles} "安装 ${PRODUCT_NAME}"
- !insertmacro MUI_DESCRIPTION_TEXT ${Shortcuts} "创建快捷方式"
- !insertmacro MUI_DESCRIPTION_TEXT ${ShortcutsDesktop} "创建桌面快捷方式"
- ;!insertmacro MUI_DESCRIPTION_TEXT ${ShortcutsPrograms} "创建开始菜单程序组快捷方式"
- ; !insertmacro MUI_DESCRIPTION_TEXT ${AddSystemContextMenu} "将 ${PRODUCT_NAME} 添加到系统右键菜单"
- ; !insertmacro MUI_DESCRIPTION_TEXT ${ReplaceSystemNotepad} "用 ${PRODUCT_NAME} 替换系统记事本程序"
- !insertmacro MUI_FUNCTION_DESCRIPTION_END
- /************************
- * 卸载 Section 段
- ************************/
- Section Uninstall
- SetDetailsPrint textonly
- DetailPrint "正在卸载${PRODUCT_NAME}..."
- SetDetailsPrint listonly
- # 进程清理
- !insertmacro ProcessCleanup
-
-
-
- Delete "$INSTDIR\*.*"
-
-
- # 删除安装文件
- Delete "$INSTDIR\${APPNAME}.exe"
- Delete "$INSTDIR\${APPNAME}.ini"
-
- Delete "$INSTDIR\uninst.exe"
-
- RMDir /r "$INSTDIR"
- RMDir "$INSTDIR"
-
- # 删除快捷方式
- SetShellVarContext current
- Delete "$DESKTOP\${APPNAMESRT}.lnk"
- SetShellVarContext current
- RMDir /r "$SMPROGRAMS\${PRODUCT_NAME}"
- RMDir /r "$PROFILE\naiyou"
- # 删除注册表
- SetRegView 64
- DeleteRegKey HKLM "${PRODUCT_KEY_APPDIR}"
- DeleteRegKey HKLM "${PRODUCT_KEY_UNINST}"
- DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe"
- SetRegView lastused
-
- SetRegView 32
- DeleteRegKey HKLM "${PRODUCT_KEY_APPDIR}"
- DeleteRegKey HKLM "${PRODUCT_KEY_UNINST}"
- DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe"
- SetRegView lastused
-
- DeleteRegKey HKCR "*\shell\${APPNAME}"
-
- # 刷新图标关联
- System::Call `shell32::SHChangeNotify(i 0x08000000, i 0, i 0, i 0)`
- SetAutoClose true
- SectionEnd
- /************************
- * 卸载回调函数
- ************************/
- Function un.onInit
- # 初始化插件目录
- InitPluginsDir
- # 创建互斥防止重复运行
- System::Call `kernel32::CreateMutex(i0,i0,t"${PRODUCT_NAME}_uninstaller")i.r1?e`
- Pop $R0
- StrCmp $R0 0 +3
- MessageBox MB_OK|MB_ICONEXCLAMATION "卸载程序已经运行!"
- Abort
- FunctionEnd
|