1

嗨,我准备了一个 Windows 服务,它通过批处理文件(.bat 文件)在服务器上设置。我也可以在运行 Uninstall.bat 后将其完全从系统中删除。Services 上没有 myservice。一切看起来都很好。

单击 Setup.exe 后,出现错误信息:错误 1001 指定的服务已存在:

如何从我的操作系统中完全删除旧的 Windows 服务。或者如何解决这个设置问题。我的uninstall.bat exe 运行良好。

4

4 回答 4

1

确实是 serverfault.com 的一个问题,但要完全删除它,请删除其在 HKLM\System\CurrentControlSet\Services 下的注册表项。

理想情况下,所有服务操作都应通过调用服务控制管理器 (SCM) 来完成。这可以通过 SC.EXE 手动完成。但是,听起来您的应用已尝试过此操作,因此请删除该密钥并重新启动 Windows。

于 2012-07-13T12:27:30.523 回答
1

我根据描述的猜测是服务(或者更确切地说是注册表项)确实存在。如果不手动干预,您将无法解决此问题。似乎发生的事情是您确实删除了该服务,但似乎没有停止它(或者它无法停止)。

当服务从 SCM 数据库中删除时仍在运行时,服务密钥将在内部标记为删除,并且密钥中将有一个附加值告诉系统在启动时删除该密钥。这个想法是,如果系统正常关闭,要删除的服务的内部链接列表将用于删除服务密钥,这将在系统重新启动之前完成。但是,如果系统崩溃,则密钥将在启动时和 SCM 开始启动服务之前被删除。

内部链表可能是在这里给您带来麻烦的原因。因为当您通过 SCM API 时,就完成了。解决此问题的一种方法(我过去曾这样做过)是在具有战略意义的时间点重命名注册表中的密钥,并将其设置为在启动时将其删除,而不是使用 SCM API。


旁注:在 MSI 中,您应该始终使用ServiceInstall/ServiceControlRegistry表而不是使用代码(无论是批处理文件还是您的自定义操作)。这些动作已经存在,只需要排序。

于 2012-07-13T13:01:37.017 回答
0

您可以使用 MSIZAP。我它将清除有关损坏的 msi 的所有信息:http: //nerdoftherings.net/wp/ ?p=66

于 2012-07-13T12:50:02.157 回答
0

方法一:通过Setup.exe找到msi文件下载到的目录。并执行..

msiexec /uninstall [path to msi or product code]

方法二(使用单片机):

sc <server> delete [service name]

试试吧,告诉我们会发生什么。

于 2012-07-13T20:27:45.337 回答