安装Windows服务失败:服务已存在

时间:2011-09-27 15:07:26

标签: c# windows-services installutil

我正在尝试重新安装我用C#编写的服务。 这是第一次有效。我使用installutil来处理安装,服务列表中出现了服务,我可以启动它。 然后我对代码进行了一些更新并卸载了服务。在弄清楚我必须关闭服务窗口后,服务似乎已经消失(即成功卸载)。 但是,在尝试再次安装服务时,我收到了消息:

System.ComponentModel.Win32Exception: The specified service already exists

这看起来很奇怪,因为我在服务窗口看不到它。我终于认为在删除关于我的服务的注册表项后发现了问题,但不幸的是,这并没有解决任何问题。

此外,再次卸载对解决问题没有太大作用,因为这会导致相互矛盾的消息:

System.ComponentModel.Win32Exception: The specified service does not exist as an installed service

我应该相信什么?该服务是否存在?我觉得自己像一个物理学家试图弄清楚猫是死了还是活着。我希望有人能够帮助解决这个问题。

6 个答案:

答案 0 :(得分:7)

一个相关的SO答案最终指出了我正确的方向(为什么我没有在谷歌或SO自己的搜索中发现我不知道)。 无论如何,显然Visual Studio生成的Designer.c也创建了一个进程和服务安装程序。当然,这些服务的安装名称与我手动创建的安装程序相同。 删除我自己的安装程序解决了这个问题。

答案 1 :(得分:5)

实际问题是您添加了serviceProcessInstaller&的对象。 serviceInstaller在你的代码中多次.. 它应该只添加一次..

打开projectinstaller的designer.cs文件,你会看到它已经添加到那里......

答案 2 :(得分:2)

我也遇到了同样的错误,所以要解决,我做的是:

  • 从解决方案资源管理器中打开ProjectInstaller.cs
  • 右键单击进入查看设计器模式,如果有代码视图

除了默认值2 之外,您将看到一个新的安装程序,即 serviceprocessInstaller1 ServiceInstaller1

只需删除自动生成的安装程序即可。现在构建和安装,它将工作。

答案 3 :(得分:2)

检查Service Installer中的服务名称属性。

答案 4 :(得分:0)

我已经尝试了上述所有解决方案。但是我的服务在注册表中安装了其他名称。因此,只需尝试删除该注册表即可。

在注册表中的链接下面打开

Hkey_Local_Macine>System>CurrentControlSet>Service>

但是我没有在此路径下找到我的服务。所以我试图在注册表中找到它。只需按Ctrl + F,然后输入服务名称即可。或一些猜名字。您将获得确切的位置。

只需删除它。它将起作用。

答案 5 :(得分:0)

如果设计器中已存在同一行,则需要删除“ Me.Installers.AddRange(New System.Configuration.Install.Installer(){Me.ServiceInstaller1,Me.ServiceProcessInstaller1})”行,然后将其安装。

ServiceProcessInstaller1是我的项目中的名称。