为什么Windows安装程序不会删除服务?

问题描述:

我已经使用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

我曾尝试加入ServiceProcessInstaller的事件处理程序,并注意到由于某种原因,Windows安装程序永远不会调用OnBeforeUninstall()和OnAfterUinstall()。同时,我注意到OnBeforeInstall()和OnAfterInstall()被调用。这是为什么Windows服务未被卸载的主要原因。

,当我试图重写ProjectInstaller类的方法(从安装derviced): protected override void OnBeforeUninstall(IDictionary savedState); protected override void OnAfterUninstall(IDictionary savedState); 我观察到Windows安装程序适当地调用这些方法,我已经写了适当的方法来去除有windows服务。

你可以试试,当你执行的应用程序,从而消除与确切名称服务的卸载执行一个命令(您可以使用CMD尝试):

sc delete “serviceName” 
+0

我可以在OnBeforeUnInstall中执行InstallUtil.exe/u 而不是正在工作的所述命令,对。还有其他更好的方法吗?为什么Windows安装程序没有这样做是我的问题。 – Rajan365

+0

也许你必须停下来,和/或以编程方式删除它。我不知道。 – CGG