2016-12-21 72 views
1

我試圖從[Code]部分(在AfterInstall處理程序中)啓動某個Windows服務。當它啓動失敗時,我想回滾安裝。如何從[Code]部分以/ VERYSILENT模式中止Inno Setup安裝?

通常,當從UI運行安裝程序時,WizardForm.Close()可以正確執行作業。但是當安裝程序使用/verysilent命令行參數執行時,WizardForm.Close似乎被忽略並且安裝繼續。 我也嘗試Abort(),由Stack Overflow的其他文章建議,但它的工作原理與其他任何suppressiblemsgbox一樣,並且不會中斷安裝。

有沒有什麼辦法可以有條件地中止安裝在/verysilent模式下?

+0

您是如何開始服務的?什麼事件功能? –

+0

@mart我使用Exec()來運行'net start service_name',但它與問題無關。 –

+0

@MartinPrikryl:哦,對於事件函數:我使用'[Files]'節中的'AfterInstall'。 –

回答

0

無法以編程方式觸發回滾。

您只能使用ExitProcess WinAPI function強制中止安裝。

procedure ExitProcess(exitCode:integer); 
    external '[email protected] stdcall'; 

現金https://stackoverflow.com/a/7022353/850848


一個清潔的解決辦法是安裝文件,並在CurStepChanged(ssInstall)的開始編程方式啓動Windows服務。如果出現問題,請使用Abort function來中斷安裝。在這種情況下,Abort的作品。請參閱function documentation

+0

不幸的是,我不能使用Abort(),因爲安裝程序首先安裝服務DLL,然後使用該服務發佈文件,然後安裝它。但是ExitProcess()就像一個魅力。謝謝! –

0

WizardForm.Show(); //使用verysilent強制顯示

+0

這是如何回答這個問題的? –