在我.nsi文件我在un.onInit
功能以下邏輯:NSIS卸載程序不運行un.onInit
Function un.onInit
MessageBox MB_YESNO "This will uninstall. Continue?" IDYES checkRunning
checkRunning:
FindProcDLL::FindProc "app.exe"
IntCmp $R0 1 0 notRunning
MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "${PRODUCT} is running, please close it so the installation can proceed." /SD IDCANCEL IDRETRY checkRunning
Abort
notRunning:
!insertmacro Init "uninstaller"
FunctionEnd
然而,在MessageBox(和正在運行的進程消息)從未顯示。所以我經歷了很多文檔,顯然運行靜默模式可以防止這種方法被調用,所以我在.nsi文件中添加了SilentInstall normal
和SilentUnInstall normal
。但是,這也不起作用。
我試圖通過手動去UNINSTALL.EXE並通過運行檢查是否存在已安裝的版本,如果有是調用安裝程序調用卸載程序:
uninst:
ClearErrors
ExecWait '$R0 _?=$INSTDIR' ;Do not copy the uninstaller to a temp file
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT}" "UninstallString"
StrCmp $R0 "" done
Abort
然而,這兩個所調用的做不會觸發到「正常」模式。那麼如何讓我的un.onInit函數被調用?
編輯:
至於有人問整個文件,here it is。我只複製了相關部分,但如果需要更多內容,請隨時查看。請注意,整個文件已經很老了,我只是更新它。
您可以在這裏發佈整個.nsi文件嗎?調用訂單有時會影響「本機」nsi方法。此外,「nsProcess.nsh」是我用來檢查正在運行的應用程序;我不是說這是這裏的問題,但我沒有看到'FindProcDLL'用於此之前...... – MoonKnight
@Killercam檢查編輯 – Gooey
我很好奇,如果行爲改變時使用'un.onGUIInit'而不是 – idleberg