[英]Inno Setup: Calling uninstaller while in setup - is that a proper way to rollback?
我有一個任務是解決我們的產品安裝程序的問題,並最終走到了死胡同,沒有任何想法。
安裝過程如下:
[Run]
部分配置一些服務 所以這個問題是Shroedinger的問題 - 在某些機器上,在配置器中取消安裝后出現意外重啟,沒有任何問題。 當然那令人惱火的用戶。
我無法弄清楚機器決定重啟的標准,但我偶然發現了這件事:
在[Run]
部分
Filename: "stub.exe"; Flags: runhidden skipifdoesntexist; BeforeInstall: ConfigureService
然后在[Code]
,如果配置程序返回錯誤的退出代碼,則ConfigureService
調用InstallationAbort
proc。
接下來,在InstallationAbort
:
Exec(ExpandConstant('{uninstallexe}'), '/VERYSILENT /noinstancecheck', '', SW_HIDE,
ewWaitUntilTerminated, ErrorCode);
因此,作者在安裝程序中要求卸載程序。 使用我確定的日志,安裝程序在卸載程序完成工作后不會結束! 它正在進入下一步(安裝完成)! 之后我可以在日志中看到
需要重啟嗎? 是
注意:如果沒有取消配置器,系統永遠不會重新啟動,即安裝完成正確。
所以我嘗試了:
/NORESTART
添加到卸載程序Exec
調用。 沒有幫助。 我認為這是因為它是安裝程序,誰決定重新啟動。 WizardForm.CancelButton.OnClick(WizardForm.CancelButton);
調用卸載程序后調用退出設置。 沒有幫助。 NeedRestart
函數以在取消時返回false 正如我試圖理解的那樣,作者因為需要刪除已安裝的服務而調用卸載程序(即使用特殊參數在UninstallRun
調用它們)
所以,我的主要問題:從[Run]
部分調用的代碼調用卸載程序,撤消[Run]
更改是否正常?
從
[Run]
部分調用的代碼調用卸載程序,撤消在[Run]
更改是否正常?
一般來說,這不是一種常見的做法。 不應該在Run
部分中止安裝。 Inno Setup不是為處理它而設計的。
但如果你需要,別無他法。 您擁有的代碼很可能基於此:
當Run命令失敗時,如何強制Inno Setup設置失敗?
但這並不意味着安裝程序應該需要重啟。 安裝程序和卸載程序之間存在一些沖突。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.