2010-09-15 32 views
3

我有一個使用InstallShield 2009構建的MSI安裝,它通過在包含service exe的組件上將「.NET Installer Class」設置爲「是」來安裝.NET服務。 這個包含文件和exe的安裝包安裝OK。我創建了一個小更新MSP,它正在更新原始安裝中的服務exe文件。 當我在包含基本安裝的系統上運行MSP時,我得到錯誤1001,因爲它正嘗試在小型更新MSP安裝期間重新安裝該服務。在MSI中安裝.NET服務的最佳方法是使其可更新?

Flexera對此問題的官方迴應是,如果.NET可執行文件需要更新,那麼應該將組件「.NET Installer Class」設置爲No並創建它們自己的自定義操作。 Flexera還承認,如果您將「.NET Installer Class」設置爲「是」,那麼您不能在任何地方記錄安裝的MSP更新。從基本安裝版本發佈以來,不可能返回並更改基本安裝,並且需要根據它創建更新。我自己想出了一種解決方法,在MSP更新中包含一個自定義操作,該操作會在安裝MSP期間卸載該服務。這會得到安裝小型更新MSP,但是此解決方法不適用於從ARP卸載MSP。

我需要知道在未來安裝中解決此問題的最佳方法。你如何以這種方式安裝.NET服務,以便稍後使用小型更新MSP輕鬆更新服務?

回答

1

服務應使用MSI方式安裝;因爲intaller類非常脆弱,但自寫的自定義操作不會更好(只是更容易控制)。您可以在組件高級設置下找到服務選項。

+0

我認爲這些選項(「控制NT服務」和「安裝NT服務」)只適用於NT服務。我過去成功地使用這些選項來安裝NT服務。我正在嘗試安裝.NET服務。這些選項是否適用於.NET服務? – Linda 2010-09-16 19:40:23

+0

在那裏有.NET服務,這不會工作(通常當他們的安裝程序類設置不相關的依賴),但在這種情況下,它應該工作正常。 Phil Wilson的帖子(http://community.flexerasoftware.com/showthread.php?t=139667第二頁上的#6)證實了這一點。 – 2010-09-17 13:23:19

0

最好的辦法是使用類似於Windows Update的MS BITS(微軟的後臺智能傳輸服務)。

當然,您的主應用程序必須具備使用此服務的能力,因此我不確定此答案是否適用於您的方案,除非您卸載當前應用程序並重新安裝帶有BITS支持的新版本。

有關BITS的更多信息,並在.NET中使用它

http://msdn.microsoft.com/en-us/library/aa362708(VS.85).aspx 
http://msdn.microsoft.com/en-us/magazine/cc188766.aspx 
http://www.codeproject.com/KB/IP/sharpBITS.aspx 
相關問題