2015-06-22 93 views
1

我有幾個使用在InstallShield中創建的MSI(使用基本MSI)安裝的topps開發的服務。我們使用傳遞安裝參數的自定義操作來安裝它們。當涉及到卸載時,我們使用傳遞卸載參數的自定義操作(我們也有適當的開始和停止的自定義操作)。所有這些都在工作,但用戶會看到一個對話框,要求他們關閉這些服務,否則可能需要重新啓動。但是,如果用戶選擇繼續,我們的自定義操作將運行,停止並卸載該服務。如何使用MSI軟件包卸載頂棚服務?

我一直無法在執行順序中移動足夠高的停止操作,以避免在不導致交易錯誤的情況下進行對話。

有什麼方法可以擺脫那個對話框嗎?

回答

1

要使用自定義操作停止服務,您需要在InstallValidate之前擁有該服務,這意味着它必須是立即的,因此如果安裝被取消或失敗,則會變得棘手,因爲那樣您會使系統停止服務。

真正的解決方案是,您應該使用ServiceInstall元素安裝服務,並使用ServiceControl元素停止/啓動/刪除它們。在卸載時,如果Windows Installer發現您要停止服務(使用ServiceControl),那麼它不會執行FilesInUse對話框。

所以簡短的回答是,你可能根本不需要自定義操作。 ServiceControl元素可用於停止和啓動所有服務(不僅僅是使用ServiceInstall安裝的服務),所以如果您執行ServiceControl元素以在卸載時停止服務,它可能會解決問題。從長遠來看,我會遠離命令行安裝並使用ServiceInstall。

+0

是的。不幸的是,我被卡住(現在)與頂架,它沒有實現安裝的標準服務接口。如果安裝被取消,我可以放棄一個停止服務的系統(不考慮即時/延遲差異),因爲它很容易重新啓動。如果我們長期保持高度,我將不得不考慮加強它以支持安裝(https://github.com/Topshelf/Topshelf/issues/145) –