3

我正在使用Visual Studio 2010與.NET 4.0。 我有一個從Visual Studio安裝項目安裝的Windows服務。在安裝項目中,我將RemovePreviousVersion屬性設置爲True。從安裝程序類停止Windows服務時出現問題。事件發生得太晚

在包含該服務的項目中,我有一個安裝程序類,用於從以前的版本升級時停止服務。

因此,升級軟件時服務已經存在並且可能正在運行。如果它正在運行,那麼在安裝過程中,安裝程序會提示該文件已被使用,並提供「重試,繼續或退出安裝」選項。在這個階段,我可以手動停止服務,然後單擊重試,這將起作用。但我不希望最終用戶必須這樣做。

我已經把messagebox的整個安裝程序類BeforeInstall,BeforeUninstall(安裝程序事件),安裝,卸載,提交,回滾(重寫的方法),所以我可以看到這些在安裝過程中被調用。

安裝程序運行時,任何安裝程序類代碼之前都會顯示該文件正在使用的提示。一旦我停止服務,然後再次單擊嘗試將會繼續,並顯示安裝類中的消息框。所以安裝程序類肯定會被稱爲在實際上做任何事情的過程中爲時已晚。

我不認爲這是早期版本的.NET中的行爲?

有沒有人遇到過這個問題或者有什麼建議?

我可以嘗試Visual Studio 2010附帶的InstallShiled LE Project,如果需要的話(不知道是否會給出相同的結果),但希望看看是否有人知道如果可能的Visual Studio安裝項目的解決方案。

回答

6

通過FilesInUse安裝程序對話框顯示再次嘗試消息。在InstallValidate操作Windows安裝程序會自動檢測正在使用的文件並提示用戶有關它們。

解決方案是在InstallValidate操作之前停止(不刪除)該服務。這可以通過自定義操作完成。

請注意,您無法使用Visual Studio在InstallValidate之前設置自定義操作。但是,您可以在生成後使用Orca編輯MSI,並在InstallExecuteSequence表中更改操作順序。

大多數商業設置創作工具和WiX支持您的操作的自定義序列。

+0

謝謝,這指出我在正確的方向。 – 2011-03-15 22:43:37