当前位置:  开发笔记 > 开发工具 > 正文

如何卸载Windows服务并删除其文件而不重新启动

如何解决《如何卸载Windows服务并删除其文件而不重新启动》经验,为你挑选了3个好方法。

我当前的项目涉及部署作为Windows服务运行的升级后的.exe文件.为了用新版本覆盖现有的.exe,我目前需要:

    停止服务

    卸载该服务

    重新启动系统(因此Windows释放它对文件的保留)

    部署新的.exe

    重新安装该服务

    启动升级的服务.

我想避免重启,这样就可以完全编写脚本/自动升级.

有什么办法可以避免重启吗?也许一个命令行工具会迫使Windows放弃它对旧的.exe的死亡控制?



1> StingyJack..:
sc delete "service name"

将删除一项服务.我发现sc实用程序比挖掘installutil更容易找到.如果您还没有,请记得停止服务.


sc删除"服务名称"<至少在Windows 7上.
[我发现](http://stackoverflow.com/a/16293612/1810429)`sc delete`在卸载它时不会停止正在运行的服务,而是将其标记为删除,这也是其文档所描述的内容.

2> Jonathan S...:

您是否无法使用以下命令在更新之前停止服务(并在更新后重新启动)?

net stop 
net start 

每当我测试/部署服务时,只要服务停止,我就可以上传文件而无需重新安装.我不确定你遇到的问题是否有所不同.


这一直是我的经验 - 我只是通过阻止它们并替换.EXE来无限更新服务.无论如何,这只是一个普通的过程.

3> cxxl..:

我遇到了和你一样的问题.我有一个系统服务,我想卸载,然后重新安装作为更新的一部分.在某些系统上,如果没有重启,这将无法工作.问题是对DeleteService()的调用会返回ok,但是以下对CreateService()的调用会告诉我服务仍然存在,但标记为删除(错误代码1072).注册表会反映出这一点,因为子键仍然存在(在HKLM\System\CurrentControlSet\Services下),但"DeleteFlag"设置为1.从那时起,只有重新启动才能解决问题.

有些事情不起作用:

使用"sc delete":它有与I相同的问题.调用将返回ok,但服务并没有真正消失,仍然在DeleteFlag = 1的注册表中.

删除注册表中的密钥.服务管理器似乎将数据库保留在内存中,注册表只是下一次引导的副本.

添加等待循环,等待.exe文件准备好被覆盖,终止进程等.

关闭服务的句柄.哪个??

但这是有效的:

我在这篇关于stackoverflow的文章中注意到net.exe也有启动/停止功能(我只知道sc.exe实用程序).奇怪的是,"net stop svcname"加上"sc delete svcname"工作了!所以net.exe必须做我不做的事情.

但net.exe不包含对ControlService()的导入,那么它如何停止服务呢?我发现net.exe会产生net1.exe,但net1.exe也不会导入ControlService().我使用了很棒的API监视器实用程序(http://www.rohitab.com/apimonitor)来查看net1.exe正在做什么,但它从未调用任何看起来很有前途的东西.

但后来我看到它从NETAPI32.DLL(其名称中至少有"Service")导入NetServiceControl().MSDN说这个功能已经过时了.不过,我在LMSvc.h中找到了原型,并在此处找到了一些参数说明:http://cyberkinetica.homeunix.net/os2tk45/srvfpgr/369_L2_NetServiceControlorN.html .当您加载NETAPI32.DLL并使用NetServiceControl(NULL, service_name, 3, 0, 0)(3用于SERVICE_CTRL_UNINSTALL,用于停止)后,服务将停止.然后可以删除并重新安装,无需D​​eleteFlag或重启!

因此,从来不是删除问题,而是正确停止服务.NetServiceControl()可以解决问题.对不起,很长的帖子,但我认为它可以帮助有类似问题的人.(仅供参考,我使用的是Win7 SP1 x64.)

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有