版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/u012896330/article/details/54949024
1、在普通安裝腳本前添加庫
!include "LogicLib.nsh"
2、; 激活安裝日誌記錄,該日誌文件將會作爲卸載文件的依據(注意,本區段必須放置在所有區段之前)
Section "-LogSetOn"
LogSet on
SectionEnd
3、
/****************************** * 以下是安裝程序的卸載部分 * ******************************/
; 根據安裝日誌卸載文件的調用宏
!macro DelFileByLog LogFile
ifFileExists `${LogFile}` 0 +4
Push `${LogFile}`
Call un.DelFileByLog
Delete `${LogFile}`
!macroend
Section Uninstall
!insertmacro MUI_STARTMENU_GETFOLDER "Application" $ICONS_GROUP
Delete "$INSTDIR\${PRODUCT_NAME}.url"
; 調用宏只根據安裝日誌卸載安裝程序自己安裝過的文件
!insertmacro DelFileByLog "$INSTDIR\install.log"
; 清除安裝程序創建的且在卸載時可能爲空的子目錄,對於遞歸添加的文件目錄,請由最內層的子目錄開始清除(注意,不要帶 /r 參數,否則會失去 DelFileByLog 的意義)
RMDir "$SMPROGRAMS\$ICONS_GROUP"
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
這期間或許會遇到該問題。
Section: "-LogSetOn"
錯誤: 已指定 LogSet , 但未定義 NSIS_CONFIG_LOG .
是這樣的提示,請問怎麼解決呢?
代碼是用HM VNISEdit 腳本編輯器嚮導產生
代碼裏都有:
!include "LogicLib.nsh"
; 激活安裝日誌記錄,該日誌文件將會作爲卸載文件的依據(注意,本區段必須放置在所有區段之前)
Section "-LogSetOn"
LogSet on
SectionEnd
最佳答案
根據你的 NSIS 版本下載開啓安裝 log 的文件覆蓋你原來的 NSIS 文件夾中同名文件:
http://sourceforge.net/projects/nsis/files/
比如 NSIS 2.46,就下載 nsis-2.46-log.zip 覆蓋你 NSIS 中同名文件。