2017-06-15 41 views
0

我已經使用C#創建了Windows服務項目(WinService.exe)。此外,我加入這個項目(ProjectInstaller.cs)安裝能力按照下面的指南從微軟: https://docs.microsoft.com/en-us/dotnet/framework/windows-services/walkthrough-creating-a-windows-service-application-in-the-component-designer爲什麼Windows安裝程序不會刪除服務?

現在,當我進行安裝和使用installutil.exe卸載,我的Windows服務項目增加了服務到服務面板並適當地從中刪除。

由於我想將此服務部署到遠程計算機,因此我使用VisualStudio 2015創建了Windows安裝程序項目(DeployService.msi)作爲服務部署項目。另外,我將安裝,卸載,提交和回滾的自定義操作配置爲主輸出作爲WinService項目。

當我使用此安裝程序執行安裝時,該服務會被添加到服務面板中,並且ApplicationFolder會複製服務所需的所有二進制文件。但是,當我執行卸載時,ApplicationFolder二進制文件被刪除,但它留下一個InstallState文件,即WinService.InstallState。重要的是,該服務不會從服務面板中刪除。

任何幫助在這裏通過Windows安裝程序從服務面板中刪除服務?

+0

是否有可能需要在卸載前停止服務?卸載程序中的這一步? – PhillipH

+0

是的,我也嘗試過,但仍然沒有從面板中刪除。 – Rajan365

回答

0

我曾嘗試加入ServiceProcessInstaller的事件處理程序,並注意到由於某種原因,Windows安裝程序永遠不會調用OnBeforeUninstall()和OnAfterUinstall()。同時,我注意到OnBeforeInstall()和OnAfterInstall()被調用。這是爲什麼Windows服務未被卸載的主要原因。

,當我試圖重寫ProjectInstaller類的方法(從安裝derviced): protected override void OnBeforeUninstall(IDictionary savedState); protected override void OnAfterUninstall(IDictionary savedState); 我觀察到Windows安裝程序適當地調用這些方法,我已經寫了適當的方法來去除有windows服務。

0

你可以試試,當你執行的應用程序,從而消除與確切名稱服務的卸載執行一個命令(您可以使用CMD嘗試):

sc delete 「serviceName」 
+0

我可以在OnBeforeUnInstall中執行InstallUtil.exe/u 而不是正在工作的所述命令,對。還有其他更好的方法嗎?爲什麼Windows安裝程序沒有這樣做是我的問題。 – Rajan365

+0

也許你必須停下來,和/或以編程方式刪除它。我不知道。 – CGG