2010-03-29 46 views
2

在卸載過程中,系統會詢問用戶「您確定要卸載...」嗎?在InnoSetup卸載結束時運行應用程序,處理用戶取消

然後用戶將點擊「是」或「否」。

是否有可能在腳本中看到這一點?

因爲我需要在卸載過程結束時執行的應用程序。

如果我在執行應用程序「InitializeUninstall()」,這是不正確的,因爲用戶可以取消卸載後(顯示在上面的對話框這個功能後)。

同樣的,「DeInitializeUninstall()」,該函數仍然執行甚至用戶取消卸載。

基本上,我需要當用戶確實是未安裝(同意卸載)來執行應用程序。因爲我需要捕獲此應用程序的ExitCode以設置UninstallNeedRestart()函數。

謝謝。

回答

1

你可以做什麼是你的[代碼]部分

[Code] 

var 
    ApplicationWasUninstalled: Boolean; 

之後添加一個全局變量,該InitializeUninstallProgressForm過程中,你可以設置全局變量設置爲1(注:僅當此功能被執行用戶點擊是當系統提示他們,如果他們想卸載應用程序

procedure InitializeUninstallProgressForm(); 
begin 
    ApplicationWasUninstalled := true; 
end; 

移動的,您將檢查ApplicationWasUninstalled的值DeinitializeUninstall功能

procedure DeinitializeUninstall(); 
begin 
    if ApplicationWasUninstalled Then Begin 
     //your code here 
    end; 
end; 
+0

爲什麼使用Integer變量而不是布爾值? – jachguate 2011-03-30 15:14:06

+0

是的,這是可以改進的。我當時很急。 – cosmin 2011-04-05 12:59:18

+0

[[CurUninstallStepChanged]](http://www.jrsoftware.org/ishelp/topic_scriptevents.htm#CurUninstallStepChanged)事件函數是自[2004年發佈](http:// www。 jrsoftware.org/files/is5-whatsnew.htm#5.0.0) – Deanna 2013-06-05 11:25:32

1

另一種方式來實現,這是使用的[運行]和/或[UninstallRun]部分運行可執行安裝/卸載之前後。

你可以運行一個可執行文件來做任何你需要的清理工作。

編譯一個幫助文件就可以做你想做的,或者提供的命令行參數,當功能添加到您的主執行程序。在Inno Setup的文檔中

[Run] 
Filename: "{app}\CleanUp.exe"; WorkingDir: "{app}" 

[UninstallRun] 
Filename: "{app}\CleanUp.exe"; Parameters: "/uninstall"; WorkingDir: "{app}"; RunOnceId: "CleanUpApp" 

的更多信息:http://www.jrsoftware.org/ishelp/index.php?topic=runsection

您需要助手exe文件添加到安裝過:

[Files] 
... 
Source: "C:\myprog\CleanUp.exe"; DestDir: "{app}"; Flags: ignoreversion 
1

您可以在CurUninstallStepChanged()事件函數,當它這樣做用usPostUninstall參數調用。

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); 
begin 
    if CurUninstallStep = usPostUninstall then 
    begin 
     // Do your uninstall time code here 
     Exec(ExpandConstant('{app}\CleanUp.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode); 
    end; 
end; 
相關問題