2012-05-16 80 views
1

我創建了一個C#4.0 Windows服務。我爲它創建了一個安裝程序項目(.msi),它將服務安裝到特定文件夾。在自定義操作中安裝Windows服務

要完全自動完成此過程,我希望將該服務作爲我的安裝程序的自定義操作的一部分進行安裝。

如何編碼我的自定義操作來安裝或何時卸載msi,卸載Windows服務?

+0

請注意,Studio 2011不支持安裝程序項目(.vdproj),因此最好先切換到WiX,然後才能使用它。 .wixproj文件具有studio支持,並且符合MSBuild。 http://blogs.msdn.com/b/buckh/archive/2011/03/17/visual-studio-setup-projects-vdproj-will-not-ship-with-future-versions-of-vs.aspx –

+0

[使用WiX安裝服務](http://goo.gl/qG1a7) – KMoraz

回答

2

您可以使用ServiceInstaller類。一個快速的解決方案是找到installutil工具並針對您的Service.exe執行它,但是您必須捕獲輸出以查看安裝是否成功,並且您對Install,Commit,階段。

1

簡單的回答:不要。正確的方法是使用MSI數據庫本身安裝它,即ServiceInstallServiceControl表。每個用於MSI創建的「便捷」IDE以及WiX都帶有原始設備,以利用此內置工具。

的真正原因,這是最佳實踐,就像包括在MSI的COM註冊,而不是調用COM(DLL)註冊的DllRegisterServer是您的應用程序可以是當時的用戶已不存在試圖刪除它。

數據庫操作仍然可以通過更新的Windows Installer來執行,比如在Windows自身升級之後,而您的代碼可能拒絕運行或者由於其他原因而無法運行。

+0

我遇到了同樣的問題。我有一個自定義操作,它將生成一組屬性和要在服務配置xml中替換的屬性。但是,然後wix在自定義操作執行之前啓動服務。因此配置文件具有相同的舊值。我已經創建了一個堆棧溢出問題http://stackoverflow.com/questions/40043204/how-to-update-xml-with-properties-added-by-the-custom-action/40051322你能幫我解決這個問題嗎? – Karthik