我有一個.NET 3.5 Windows服務,有幾種不同的配置/風格,即。發佈,測試,調試等。我已經創建了一個安裝程序包,用於構建作爲msbuild腳本一部分的服務,但是我需要能夠以允許每種服務風格的方式構建安裝程序安裝在同一臺機器上。有誰知道這樣做的最佳方式?在同一臺PC上安裝Windows服務的多個版本
感謝
我有一個.NET 3.5 Windows服務,有幾種不同的配置/風格,即。發佈,測試,調試等。我已經創建了一個安裝程序包,用於構建作爲msbuild腳本一部分的服務,但是我需要能夠以允許每種服務風格的方式構建安裝程序安裝在同一臺機器上。有誰知道這樣做的最佳方式?在同一臺PC上安裝Windows服務的多個版本
感謝
也許this article會有所幫助?
的問題
當使用反射審查
ServiceInstaller
類,你會看到它 確實在 一個Win32調用CreateService
的ServiceInstaller.Install
方法。CreateService
將返回ERROR_DUPLICATE_SERVICE_NAME
返回 代碼每當方法被調用 與serviceName
或displayName
參數相匹配的一個 已安裝服務的。這是 是什麼原因導致Win32Exception
爲 在上述窗口中拋出並且 最終導致第二次安裝 失敗。您可以在CreateService 函數here上查看完整的 文檔。爲了解決這個問題,所有需要 做的是在安裝和 服務啓動爲一個已知值和 動態設置 服務名稱,以確保該值是服務的每個實例不同 你安裝了 。
解決方案
所有這一切需要做的就是讓 確保每個服務 安裝實例的名稱是獨一無二的。然後 您需要爲您想要的每個 服務實例安裝 安裝目錄的副本。 最後,您需要在 安裝和啓動期間動態設置 服務名稱。這將是 便利使用app.config文件。
本文繼續提供有關如何在同一臺計算機上安裝.NET Windows服務的多個實例的分步說明。
當然,我不禁想知道爲什麼正好需要在同一臺機器上同時運行調試版和發行版。
只是想提請注意文章科迪灰色參考文獻中的評論。看來作者和評論者認爲使用sc更容易。exe文件如下
sc \\myserver create NewService binpath= c:\nt\system32\NewServ.exe
謝謝,這有幫助。至於爲什麼需要這個......不是我的想法,坦率地說,我認爲這不是必要的。根據我們的高級開發人員,我們應該將其作爲我們構建的一部分,儘管我不完全確定爲什麼! – TabbyCool 2010-12-01 14:04:47
@TabbyCool:這是一個非常奇怪的要求。測試版本的發佈版本是一個好主意(只是爲了確保編譯器優化不會引入錯誤),但我沒有看到他們需要同時運行的理由。考慮到沒有最終用戶會在該配置中運行,我希望它只是使調試更加困難。如果您需要能夠調試發佈版本,更好的辦法就是爲發佈版本生成PDB符號,而不是試圖同時運行這兩個版本。無論如何,很高興提供幫助。 – 2010-12-01 14:08:02