如何从操作系统中完全删除/删除/删除Windows服务?

时间:2012-07-13 12:23:28

标签: c# .net windows-services setup-project

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

单击Setup.exe后,将显示错误消息:错误1001指定的服务已存在:

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

4 个答案:

答案 0 :(得分:1)

对于serverfault.com来说真的是一个问题,但要完全删除它,请删除HKLM \ System \ CurrentControlSet \ Services下的注册表项。

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

答案 1 :(得分:1)

根据描述,我的猜测是服务(或者更确切地说是注册表项)确实存在。没有人工干预,你将无法解决这个问题。似乎发生的事情是你确实删除了服务,但似乎没有阻止它(或者它无法停止)。

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

内部链表可能会给您带来麻烦。因为当你通过SCM API完成所需的工作时。解决这个问题的一种方法(我过去已经这样做了)是在战略上很好的时间点重命名注册表中的密钥,并将其设置为在启动时删除而不是使用SCM API。


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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

msiexec /uninstall [path to msi or product code]

方法2(使用SCM):

sc <server> delete [service name]

尝试告诉我们会发生什么。