2012-09-05 44 views
0

我有一個使用自定義安裝程序/卸載程序安裝服務的.NET應用程序。以編程方式卸載應用程序 - 即使自定義卸載程序失敗

這已被封裝到Windows安裝程序中,以便在安裝時註冊該服務,並在卸載它時取消註冊此服務。但有些情況下自定義卸載程序可能會失敗。 (在我的情況,我已經手動調用installutil卸載的服務。)

現在,當我試圖卸載通過Windows安裝程序框架產品,以下錯誤出現:

錯誤1001 。卸載時發生異常。此例外 將被忽略,卸載將繼續。但是, 應用程序可能未完全卸載,卸載完成後是 。 - >指定的服務不作爲安裝的 服務存在。

這是有道理的。除了THEN之外,儘管消息說了什麼,卸載也會回滾。 (這個問題也被描述爲here)。

我知道如果手動重新安裝服務,卸載可能會起作用。

但我想知道是否有某種方法可以強制安裝產品列表。卸載此的


我現在的編程方法是調用

::MsiConfigureProduct(productCode.c_str(), INSTALLLEVEL_DEFAULT, INSTALLSTATE_ABSENT); 

但是,這只是有通過控制面板,卸載失敗的效果相同。

我還能採取哪些其他方法?

回答

2

這就是爲什麼我告訴人們不要使用Visual Studio部署項目,InstallUtil自定義操作,並且只安裝在虛擬機上而不是在他們自己的盒子上。

因此,這裏是你需要做什麼:

找到您用來安裝MSI。使用Orca編輯它,並從InstallExecuteSequence中刪除自定義操作(或將GOTOHELL = 666等非空操作條件放在它們上面)。

運行命令:

msiexec /i foo.msi REINSTALL=ALL REINSTALLMODE=vomus 

這將 '重新緩存' 的MSI。現在使用添加/刪除程序卸載程序。

現在切換到一個更好的工具,它實際暴露了ServiceInstall表。剛剛發現的時候,重新發明輪子永遠不會結束。不要讓它發生在您的客戶身上。

最後,使用SC命令停止並刪除孤立的服務。

+0

謝謝,我並不知道Orca實用程序。 另外,您的建議不使用Visual Studio部署項目已由Visual Studio團隊。我現在必須尋找一種不同的方式來生成安裝程序,以便能夠升級到Visual Studio 2012。 –

+0

我幫助了很多人前進,以防您想要一些幫助。 –