提供修复界面的NSIS安装包
; 该脚本由邦畿千里制作,可自由传播使用 QQ
:
911377
! include " LogicLib.nsh "
; 安装背景及文字
! define PRODUCT_TEXT_KEY " (邦畿千里) "
! define PRODUCT_TEXT_BACK " resource\back.bmp "
! define PRODUCT_TEXT_PROXCY " 现无偿提供给NSIS爱好者使用! "
! define PRODUCT_TEXT_TEL " QQ:911137 "
! define PRODUCT_TEXT_AREA " 1.自动监测,修复,安装,删除! "
! define PRODUCT_TEXT_INTRUDUCE " 2.自由替换图片、背景,注册动态库,执行Exe多种功能! "
; 安装程序初始定义常量
! define PRODUCT_PATH " 邦畿千里系列软件 "
! define PRODUCT_NAME " 邦畿千里画图软件 "
! define PRODUCT_MAINEXE " mspaint.exe "
! define PRODUCT_VERSION " 2008 "
! define PRODUCT_PUBLISHER " 邦畿千里 "
! define PRODUCT_WEB_SITE " http://www.baidu.com "
! define PRODUCT_REGRUN " Software\Microsoft\Windows\CurrentVersion\Run "
! define PRODUCT_DIR_REGKEY " Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_PUBLISHER}\${PRODUCT_NAME} "
! define PRODUCT_UNINST_KEY " Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_TEXT_KEY}${PRODUCT_NAME} "
! define PRODUCT_UNINST_ROOT_KEY " HKLM "
SetCompressor lzma
; ------ MUI 现代界面定义 ( 1.67 版本以上兼容) ------
! include " MUI.nsh "
; MUI 预定义常量
; --------------------------------
;Interface Configuration
! define MUI_ABORTWARNING
;安装图标
! define MUI_ICON " resource\install.ico "
;卸载图标
! define MUI_UNICON " resource\uninstall.ico "
;上部图片
! define MUI_HEADERIMAGE
! define MUI_HEADERIMAGE_BITMAP " resource\header.bmp "
;左侧图片
! define MUI_WELCOMEFINISHPAGE_BITMAP " resource\left.bmp "
! define MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH
! define MUI_UNWELCOMEFINISHPAGE_BITMAP " resource\left.bmp "
! define MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH
;页面加载之前进行初始化
! define MUI_CUSTOMFUNCTION_GUIINIT " .onGUIBegin "
; ------------- 修复页面变量定义 -----------------------
! include nsDialogs . nsh
Var UninstallFileName
Var RADIO_REPAIR
Var RADIO_REMOVE
Var Checkbox_State_REPAIR
Var Checkbox_State_REMOVE
Var Checkbox_State
; ------------- 页面定义 ---------------------------
; 欢迎页面
! insertmacro MUI_PAGE_WELCOME
; 修复页面
Page custom nsDialogsRepair nsDialogsRepairLeave
; 许可协议页面
! insertmacro MUI_PAGE_LICENSE " resource\licence.txt "
; 安装目录选择页面
! insertmacro MUI_PAGE_DIRECTORY
; 安装过程页面
! insertmacro MUI_PAGE_INSTFILES
; 安转完成后自动运行文件
! define MUI_FINISHPAGE_RUN " $INSTDIR\${PRODUCT_MAINEXE} "
; 安装完成页面
! insertmacro MUI_PAGE_FINISH
; 安装卸载确认页面
! insertmacro MUI_UNPAGE_CONFIRM
; 安装卸载过程页面
! insertmacro MUI_UNPAGE_INSTFILES
; 安装卸载完成页面
! insertmacro MUI_UNPAGE_FINISH
; 安装预释放文件
! insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
; 安装界面包含的语言设置
! insertmacro MUI_LANGUAGE " SimpChinese "
; ------ MUI 现代界面定义结束 ------
Name " ${PRODUCT_NAME} ${PRODUCT_VERSION} "
OutFile " ${PRODUCT_NAME} ${PRODUCT_VERSION}.exe "
InstallDir " $PROGRAMFILES\${PRODUCT_PATH}\${PRODUCT_NAME} "
InstallDirRegKey HKLM " ${PRODUCT_UNINST_KEY} " " UninstallString "
ShowInstDetails hide
ShowUnInstDetails hide
BrandingText ${PRODUCT_PUBLISHER}
; 激活安装日志记录,该日志文件将会作为卸载文件的依据(注意,本区段必须放置在所有区段之前)
Section " -LogSetOn "
LogSet on
SectionEnd
Section " !主程序 " SEC01
SectionIn RO
SetOutPath " $INSTDIR "
SetOverwrite ifnewer
CreateDirectory " $SMPROGRAMS\${PRODUCT_PATH}\${PRODUCT_NAME} "
; 创建开始菜单快捷方式
CreateShortCut " $SMPROGRAMS\${PRODUCT_PATH}\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk " " $INSTDIR\${PRODUCT_MAINEXE} "
; 创建桌面快捷方式
CreateShortCut " $DESKTOP\${PRODUCT_NAME}.lnk " " $INSTDIR\${PRODUCT_MAINEXE} "
File " Program\Main\mspaint.exe "
SectionEnd
Section " -系统文件 " SEC02
SectionIn RO
; 关闭日志,以保证不被卸载掉,主要用于公用文件
LogSet off
SetOutPath " $SYSDIR "
SetOverwrite ifnewer
File " Program\System\midas.dll "
; 注册动态库
regdll $SYSDIR \ midas . dll
LogSet on
SectionEnd
/******************************
* 创建卸载快捷方式 *
******************************/
Section - AdditionalIcons
; 创建开始菜单卸载快捷方式
CreateShortCut " $SMPROGRAMS\${PRODUCT_PATH}\${PRODUCT_NAME}\Uninstall.lnk " " $INSTDIR\uninst.exe "
SectionEnd
/******************************
* 写注册表 *
******************************/
Section - Post
WriteUninstaller " $INSTDIR\uninst.exe "
; 系统启动自动运行软件
WriteRegStr HKLM " ${PRODUCT_REGRUN} " " ${PRODUCT_NAME} " " $INSTDIR\${PRODUCT_MAINEXE} "
WriteRegStr HKLM " ${PRODUCT_DIR_REGKEY} " "" " $INSTDIR\${PRODUCT_MAINEXE} "
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\${PRODUCT_MAINEXE} "
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
/******************************
* 以下是安装程序的初始和结束部分 *
******************************/
; 页面加载之前进行初始化
Function . onInit
ReadRegStr $UninstallFileName ${PRODUCT_UNINST_ROOT_KEY} " ${PRODUCT_UNINST_KEY} " " UninstallString "
FunctionEnd
; 启动背景
Function . onGUIBegin
BgImage :: SetBg / NOUNLOAD / FILLSCREEN ${PRODUCT_TEXT_BACK}
CreateFont $R0 " Comic Sans MS " 30 400
BgImage :: AddText / NOUNLOAD " ${PRODUCT_NAME} " $R0 0 0 255 48 18 798 198
CreateFont $R3 " Comic Sans MS " 10 100
BgImage :: AddText / NOUNLOAD ${PRODUCT_TEXT_AREA} $R3 0 0 255 88 78 798 198
CreateFont $R4 " Comic Sans MS " 10 100
BgImage :: AddText / NOUNLOAD ${PRODUCT_TEXT_INTRUDUCE} $R4 0 0 255 88 98 798 198
CreateFont $R1 " Comic Sans MS " 20 200
BgImage :: AddText / NOUNLOAD ${PRODUCT_TEXT_PROXCY} $R1 0 0 255 68 118 798 198
CreateFont $R2 " Comic Sans MS " 20 200
BgImage :: AddText / NOUNLOAD ${PRODUCT_TEXT_TEL} $R2 0 0 255 68 158 798 198
BgImage :: Redraw / NOUNLOAD
FunctionEnd
; 销毁启动背景
Function . onGUIEnd
BgImage :: Destroy
FunctionEnd
/******************************
* 以下是安装程序的卸载部分 *
******************************/
; 根据安装日志卸载文件的调用宏
! macro DelFileByLog LogFile
ifFileExists `${LogFile}` 0 + 4
Push `${LogFile}`
Call un . DelFileByLog
Delete `${LogFile}`
! macroend
Section Uninstall
; 调用宏只根据安装日志卸载安装程序自己安装过的文件
! insertmacro DelFileByLog " $INSTDIR\install.log "
; 清除安装程序创建的且在卸载时可能为空的子目录,对于递归添加的文件目录,请由最内层的子目录开始清除(注意,不要带 / r 参数,否则会失去 DelFileByLog 的意义)
RMDir " $SMPROGRAMS\${PRODUCT_PATH}\${PRODUCT_NAME} "
RMDir " $SMPROGRAMS\${PRODUCT_PATH} "
RMDir " $INSTDIR "
DeleteRegValue HKLM " ${PRODUCT_REGRUN} " " ${PRODUCT_NAME} "
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} " ${PRODUCT_UNINST_KEY} "
DeleteRegKey HKLM " ${PRODUCT_DIR_REGKEY} "
SetAutoClose true
SectionEnd
# -- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--#
; 以下是卸载程序通过安装日志卸载文件的专用函数,请不要随意修改
Function un . DelFileByLog
Exch $R0
Push $R1
Push $R2
Push $R3
FileOpen $R0 $R0 r
${ Do }
FileRead $R0 $R1
${IfThen} $R1 == `` ${ | } ${ExitDo} ${ | }
StrCpy $R1 $R1 - 2
StrCpy $R2 $R1 11
StrCpy $R3 $R1 20
${ If } $R2 == " File: wrote "
${OrIf} $R2 == " File: skipp "
${OrIf} $R3 == " CreateShortCut: out: "
${OrIf} $R3 == " created uninstaller: "
Push $R1
Push ` " `
Call un.DelFileByLog.StrLoc
Pop $R2
${If} $R2 != ""
IntOp $R2 $R2 + 1
StrCpy $R3 $R1 "" $R2
Push $R3
Push ` " `
Call un . DelFileByLog . StrLoc
Pop $R2
${ If } $R2 != ""
StrCpy $R3 $R3 $R2
Delete / REBOOTOK $R3
${EndIf}
${EndIf}
${EndIf}
StrCpy $R2 $R1 7
${ If } $R2 == " Rename: "
Push $R1
Push " -> "
Call un . DelFileByLog . StrLoc
Pop $R2
${ If } $R2 != ""
IntOp $R2 $R2 + 2
StrCpy $R3 $R1 "" $R2
Delete / REBOOTOK $R3
${EndIf}
${EndIf}
${Loop}
FileClose $R0
Pop $R3
Pop $R2
Pop $R1
Pop $R0
FunctionEnd
Function un . DelFileByLog . StrLoc
Exch $R0
Exch
Exch $R1
Push $R2
Push $R3
Push $R4
Push $R5
StrLen $R2 $R0
StrLen $R3 $R1
StrCpy $R4 0
${ Do }
StrCpy $R5 $R1 $R2 $R4
${ If } $R5 == $R0
${OrIf} $R4 = $R3
${ExitDo}
${EndIf}
IntOp $R4 $R4 + 1
${Loop}
${ If } $R4 = $R3
StrCpy $R0 ""
${ Else }
StrCpy $R0 $R4
${EndIf}
Pop $R5
Pop $R4
Pop $R3
Pop $R2
Pop $R1
Exch $R0
FunctionEnd
/******************************
* 以下是安装程序的修复部分 *
******************************/
Function nsDialogsRepairLeave
${NSD_GetState} $RADIO_REPAIR $Checkbox_State_REPAIR
${NSD_GetState} $RADIO_REMOVE $Checkbox_State_REMOVE
${ If } $Checkbox_State_REMOVE == ${BST_CHECKED}
Exec $UninstallFileName
Quit
${EndIf}
FunctionEnd
Function nsDialogsRepair
${ if } $UninstallFileName == ""
Abort
${EndIf}
! insertmacro MUI_HEADER_TEXT " 已经安装 " " 选择您要执行的操作 "
nsDialogs :: Create / NOUNLOAD 1018
${NSD_CreateLabel} 10u 0u 300u 30u " 软件已经安装,请选择您要执行的操作,并点击『下一步(N)』继续 "
${NSD_CreateRadioButton} 40u 30u 100u 30u " 修复或重新安装 "
Pop $RADIO_REPAIR
${ If } $Checkbox_State_REPAIR == ${BST_CHECKED}
${NSD_Check} $RADIO_REPAIR
${NSD_GetState} $RADIO_REPAIR $Checkbox_State
${EndIf}
${NSD_CreateRadioButton} 40u 60u 100u 30u " 卸载 "
Pop $RADIO_REMOVE
${ If } $Checkbox_State_REMOVE == ${BST_CHECKED}
${NSD_Check} $RADIO_REMOVE
${NSD_GetState} $RADIO_REMOVE $Checkbox_State
${EndIf}
${ If } $Checkbox_State <> ${BST_CHECKED}
${NSD_Check} $RADIO_REPAIR
${EndIf}
nsDialogs :: Show
FunctionEnd
! include " LogicLib.nsh "
; 安装背景及文字
! define PRODUCT_TEXT_KEY " (邦畿千里) "
! define PRODUCT_TEXT_BACK " resource\back.bmp "
! define PRODUCT_TEXT_PROXCY " 现无偿提供给NSIS爱好者使用! "
! define PRODUCT_TEXT_TEL " QQ:911137 "
! define PRODUCT_TEXT_AREA " 1.自动监测,修复,安装,删除! "
! define PRODUCT_TEXT_INTRUDUCE " 2.自由替换图片、背景,注册动态库,执行Exe多种功能! "
; 安装程序初始定义常量
! define PRODUCT_PATH " 邦畿千里系列软件 "
! define PRODUCT_NAME " 邦畿千里画图软件 "
! define PRODUCT_MAINEXE " mspaint.exe "
! define PRODUCT_VERSION " 2008 "
! define PRODUCT_PUBLISHER " 邦畿千里 "
! define PRODUCT_WEB_SITE " http://www.baidu.com "
! define PRODUCT_REGRUN " Software\Microsoft\Windows\CurrentVersion\Run "
! define PRODUCT_DIR_REGKEY " Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_PUBLISHER}\${PRODUCT_NAME} "
! define PRODUCT_UNINST_KEY " Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_TEXT_KEY}${PRODUCT_NAME} "
! define PRODUCT_UNINST_ROOT_KEY " HKLM "
SetCompressor lzma
; ------ MUI 现代界面定义 ( 1.67 版本以上兼容) ------
! include " MUI.nsh "
; MUI 预定义常量
; --------------------------------
;Interface Configuration
! define MUI_ABORTWARNING
;安装图标
! define MUI_ICON " resource\install.ico "
;卸载图标
! define MUI_UNICON " resource\uninstall.ico "
;上部图片
! define MUI_HEADERIMAGE
! define MUI_HEADERIMAGE_BITMAP " resource\header.bmp "
;左侧图片
! define MUI_WELCOMEFINISHPAGE_BITMAP " resource\left.bmp "
! define MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH
! define MUI_UNWELCOMEFINISHPAGE_BITMAP " resource\left.bmp "
! define MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH
;页面加载之前进行初始化
! define MUI_CUSTOMFUNCTION_GUIINIT " .onGUIBegin "
; ------------- 修复页面变量定义 -----------------------
! include nsDialogs . nsh
Var UninstallFileName
Var RADIO_REPAIR
Var RADIO_REMOVE
Var Checkbox_State_REPAIR
Var Checkbox_State_REMOVE
Var Checkbox_State
; ------------- 页面定义 ---------------------------
; 欢迎页面
! insertmacro MUI_PAGE_WELCOME
; 修复页面
Page custom nsDialogsRepair nsDialogsRepairLeave
; 许可协议页面
! insertmacro MUI_PAGE_LICENSE " resource\licence.txt "
; 安装目录选择页面
! insertmacro MUI_PAGE_DIRECTORY
; 安装过程页面
! insertmacro MUI_PAGE_INSTFILES
; 安转完成后自动运行文件
! define MUI_FINISHPAGE_RUN " $INSTDIR\${PRODUCT_MAINEXE} "
; 安装完成页面
! insertmacro MUI_PAGE_FINISH
; 安装卸载确认页面
! insertmacro MUI_UNPAGE_CONFIRM
; 安装卸载过程页面
! insertmacro MUI_UNPAGE_INSTFILES
; 安装卸载完成页面
! insertmacro MUI_UNPAGE_FINISH
; 安装预释放文件
! insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
; 安装界面包含的语言设置
! insertmacro MUI_LANGUAGE " SimpChinese "
; ------ MUI 现代界面定义结束 ------
Name " ${PRODUCT_NAME} ${PRODUCT_VERSION} "
OutFile " ${PRODUCT_NAME} ${PRODUCT_VERSION}.exe "
InstallDir " $PROGRAMFILES\${PRODUCT_PATH}\${PRODUCT_NAME} "
InstallDirRegKey HKLM " ${PRODUCT_UNINST_KEY} " " UninstallString "
ShowInstDetails hide
ShowUnInstDetails hide
BrandingText ${PRODUCT_PUBLISHER}
; 激活安装日志记录,该日志文件将会作为卸载文件的依据(注意,本区段必须放置在所有区段之前)
Section " -LogSetOn "
LogSet on
SectionEnd
Section " !主程序 " SEC01
SectionIn RO
SetOutPath " $INSTDIR "
SetOverwrite ifnewer
CreateDirectory " $SMPROGRAMS\${PRODUCT_PATH}\${PRODUCT_NAME} "
; 创建开始菜单快捷方式
CreateShortCut " $SMPROGRAMS\${PRODUCT_PATH}\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk " " $INSTDIR\${PRODUCT_MAINEXE} "
; 创建桌面快捷方式
CreateShortCut " $DESKTOP\${PRODUCT_NAME}.lnk " " $INSTDIR\${PRODUCT_MAINEXE} "
File " Program\Main\mspaint.exe "
SectionEnd
Section " -系统文件 " SEC02
SectionIn RO
; 关闭日志,以保证不被卸载掉,主要用于公用文件
LogSet off
SetOutPath " $SYSDIR "
SetOverwrite ifnewer
File " Program\System\midas.dll "
; 注册动态库
regdll $SYSDIR \ midas . dll
LogSet on
SectionEnd
/******************************
* 创建卸载快捷方式 *
******************************/
Section - AdditionalIcons
; 创建开始菜单卸载快捷方式
CreateShortCut " $SMPROGRAMS\${PRODUCT_PATH}\${PRODUCT_NAME}\Uninstall.lnk " " $INSTDIR\uninst.exe "
SectionEnd
/******************************
* 写注册表 *
******************************/
Section - Post
WriteUninstaller " $INSTDIR\uninst.exe "
; 系统启动自动运行软件
WriteRegStr HKLM " ${PRODUCT_REGRUN} " " ${PRODUCT_NAME} " " $INSTDIR\${PRODUCT_MAINEXE} "
WriteRegStr HKLM " ${PRODUCT_DIR_REGKEY} " "" " $INSTDIR\${PRODUCT_MAINEXE} "
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\${PRODUCT_MAINEXE} "
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
/******************************
* 以下是安装程序的初始和结束部分 *
******************************/
; 页面加载之前进行初始化
Function . onInit
ReadRegStr $UninstallFileName ${PRODUCT_UNINST_ROOT_KEY} " ${PRODUCT_UNINST_KEY} " " UninstallString "
FunctionEnd
; 启动背景
Function . onGUIBegin
BgImage :: SetBg / NOUNLOAD / FILLSCREEN ${PRODUCT_TEXT_BACK}
CreateFont $R0 " Comic Sans MS " 30 400
BgImage :: AddText / NOUNLOAD " ${PRODUCT_NAME} " $R0 0 0 255 48 18 798 198
CreateFont $R3 " Comic Sans MS " 10 100
BgImage :: AddText / NOUNLOAD ${PRODUCT_TEXT_AREA} $R3 0 0 255 88 78 798 198
CreateFont $R4 " Comic Sans MS " 10 100
BgImage :: AddText / NOUNLOAD ${PRODUCT_TEXT_INTRUDUCE} $R4 0 0 255 88 98 798 198
CreateFont $R1 " Comic Sans MS " 20 200
BgImage :: AddText / NOUNLOAD ${PRODUCT_TEXT_PROXCY} $R1 0 0 255 68 118 798 198
CreateFont $R2 " Comic Sans MS " 20 200
BgImage :: AddText / NOUNLOAD ${PRODUCT_TEXT_TEL} $R2 0 0 255 68 158 798 198
BgImage :: Redraw / NOUNLOAD
FunctionEnd
; 销毁启动背景
Function . onGUIEnd
BgImage :: Destroy
FunctionEnd
/******************************
* 以下是安装程序的卸载部分 *
******************************/
; 根据安装日志卸载文件的调用宏
! macro DelFileByLog LogFile
ifFileExists `${LogFile}` 0 + 4
Push `${LogFile}`
Call un . DelFileByLog
Delete `${LogFile}`
! macroend
Section Uninstall
; 调用宏只根据安装日志卸载安装程序自己安装过的文件
! insertmacro DelFileByLog " $INSTDIR\install.log "
; 清除安装程序创建的且在卸载时可能为空的子目录,对于递归添加的文件目录,请由最内层的子目录开始清除(注意,不要带 / r 参数,否则会失去 DelFileByLog 的意义)
RMDir " $SMPROGRAMS\${PRODUCT_PATH}\${PRODUCT_NAME} "
RMDir " $SMPROGRAMS\${PRODUCT_PATH} "
RMDir " $INSTDIR "
DeleteRegValue HKLM " ${PRODUCT_REGRUN} " " ${PRODUCT_NAME} "
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} " ${PRODUCT_UNINST_KEY} "
DeleteRegKey HKLM " ${PRODUCT_DIR_REGKEY} "
SetAutoClose true
SectionEnd
# -- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--#
; 以下是卸载程序通过安装日志卸载文件的专用函数,请不要随意修改
Function un . DelFileByLog
Exch $R0
Push $R1
Push $R2
Push $R3
FileOpen $R0 $R0 r
${ Do }
FileRead $R0 $R1
${IfThen} $R1 == `` ${ | } ${ExitDo} ${ | }
StrCpy $R1 $R1 - 2
StrCpy $R2 $R1 11
StrCpy $R3 $R1 20
${ If } $R2 == " File: wrote "
${OrIf} $R2 == " File: skipp "
${OrIf} $R3 == " CreateShortCut: out: "
${OrIf} $R3 == " created uninstaller: "
Push $R1
Push ` " `
Call un.DelFileByLog.StrLoc
Pop $R2
${If} $R2 != ""
IntOp $R2 $R2 + 1
StrCpy $R3 $R1 "" $R2
Push $R3
Push ` " `
Call un . DelFileByLog . StrLoc
Pop $R2
${ If } $R2 != ""
StrCpy $R3 $R3 $R2
Delete / REBOOTOK $R3
${EndIf}
${EndIf}
${EndIf}
StrCpy $R2 $R1 7
${ If } $R2 == " Rename: "
Push $R1
Push " -> "
Call un . DelFileByLog . StrLoc
Pop $R2
${ If } $R2 != ""
IntOp $R2 $R2 + 2
StrCpy $R3 $R1 "" $R2
Delete / REBOOTOK $R3
${EndIf}
${EndIf}
${Loop}
FileClose $R0
Pop $R3
Pop $R2
Pop $R1
Pop $R0
FunctionEnd
Function un . DelFileByLog . StrLoc
Exch $R0
Exch
Exch $R1
Push $R2
Push $R3
Push $R4
Push $R5
StrLen $R2 $R0
StrLen $R3 $R1
StrCpy $R4 0
${ Do }
StrCpy $R5 $R1 $R2 $R4
${ If } $R5 == $R0
${OrIf} $R4 = $R3
${ExitDo}
${EndIf}
IntOp $R4 $R4 + 1
${Loop}
${ If } $R4 = $R3
StrCpy $R0 ""
${ Else }
StrCpy $R0 $R4
${EndIf}
Pop $R5
Pop $R4
Pop $R3
Pop $R2
Pop $R1
Exch $R0
FunctionEnd
/******************************
* 以下是安装程序的修复部分 *
******************************/
Function nsDialogsRepairLeave
${NSD_GetState} $RADIO_REPAIR $Checkbox_State_REPAIR
${NSD_GetState} $RADIO_REMOVE $Checkbox_State_REMOVE
${ If } $Checkbox_State_REMOVE == ${BST_CHECKED}
Exec $UninstallFileName
Quit
${EndIf}
FunctionEnd
Function nsDialogsRepair
${ if } $UninstallFileName == ""
Abort
${EndIf}
! insertmacro MUI_HEADER_TEXT " 已经安装 " " 选择您要执行的操作 "
nsDialogs :: Create / NOUNLOAD 1018
${NSD_CreateLabel} 10u 0u 300u 30u " 软件已经安装,请选择您要执行的操作,并点击『下一步(N)』继续 "
${NSD_CreateRadioButton} 40u 30u 100u 30u " 修复或重新安装 "
Pop $RADIO_REPAIR
${ If } $Checkbox_State_REPAIR == ${BST_CHECKED}
${NSD_Check} $RADIO_REPAIR
${NSD_GetState} $RADIO_REPAIR $Checkbox_State
${EndIf}
${NSD_CreateRadioButton} 40u 60u 100u 30u " 卸载 "
Pop $RADIO_REMOVE
${ If } $Checkbox_State_REMOVE == ${BST_CHECKED}
${NSD_Check} $RADIO_REMOVE
${NSD_GetState} $RADIO_REMOVE $Checkbox_State
${EndIf}
${ If } $Checkbox_State <> ${BST_CHECKED}
${NSD_Check} $RADIO_REPAIR
${EndIf}
nsDialogs :: Show
FunctionEnd