![安装循环:“指定的服务已存在”和“指定的服务不存在作为已安装的服务”](https://linux22.com/image/726273/%E5%AE%89%E8%A3%85%E5%BE%AA%E7%8E%AF%EF%BC%9A%E2%80%9C%E6%8C%87%E5%AE%9A%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%B7%B2%E5%AD%98%E5%9C%A8%E2%80%9D%E5%92%8C%E2%80%9C%E6%8C%87%E5%AE%9A%E7%9A%84%E6%9C%8D%E5%8A%A1%E4%B8%8D%E5%AD%98%E5%9C%A8%E4%BD%9C%E4%B8%BA%E5%B7%B2%E5%AE%89%E8%A3%85%E7%9A%84%E6%9C%8D%E5%8A%A1%E2%80%9D.png)
在 Windows Server 2012 R2 上安装内部开发的服务时,系统不知何故进入了 InstallUtil.exe 认为服务既存在又不存在的状态。执行安装命令后,进程启动并回滚,并出现错误:
System.ComponentModel.Win32Exception:指定的服务已存在
在向 InstallUtil.exe 发出该服务文件的卸载命令后,该过程最终完成并出现错误:
System.ComponentModel.Win32Exception:指定的服务不存在作为已安装的服务
在我尝试卸载并重新安装之前,该服务确实存在,尽管我现在在 Powershell 命令 Get-Service、程序集文件和注册表中都找不到它的踪迹。我认为这是由于编译软件中的服务名称更改而导致的,而没有完全卸载/重新安装(例如,只是覆盖可执行文件)。我的问题是,我现在可以做什么来诊断问题?
答案1
找到并确定了原因:另一位开发人员在项目中无意中添加了第二个具有完全相同服务名称的服务安装程序。(当然,他没有测试过这个更改。)尝试安装两个具有完全相同名称的服务的最终结果没有反映在任何 Windows 或安装日志中,也没有反映在通过命令行安装服务时的命令提示符中。
为了做出这个诊断,我亲自查看了源代码并修改了服务名称。重建并安装后,服务列表中添加了两个服务。
答案2
就我的情况而言,我选择的“Monitor”这个有点通用的名称实际上已经存在。我想出了一个更具体的名称,一切顺利。