我正在使用由其他人编写的VB脚本文件,该脚本使用Windows Management Instrumentation(WMI)调用来检查多个Windows服务的状态。此脚本按设定的计划每隔几分钟运行一次。我需要为这些服务升级/替换.exe。
我停止VB脚本,停止服务并卸载服务,使它们不再出现在“服务”面板(services.msc)中。不幸的是,WMI(wmiprvse.exe)仍然具有服务.exe文件的句柄。我可以通过重新启动系统来释放句柄,但我想尽可能避免这种情况,这样就可以完全编写脚本/自动升级。
有没有办法可以强制WMI释放它在.exe上的句柄?请记住,我刚接触WMI。
答案 0 :(得分:1)
我也在寻找这个问题的解决方案。还想了解为什么wmiprsve会处理我的某些服务可执行文件,而不是其他服务可执行文件。
我正在使用的解决方法是杀死wmiprvse进程。您可以使用SysInternals命令行工具(pslist,pskill)自动获取进程ID并执行kill。
答案 1 :(得分:0)
您只需重新启动WMI服务(winmgmt)即可强制它释放您的文件。如果您的服务在WMI启动时未注册,则无法锁定文件。
停止服务,卸载服务,重启WMI,替换文件,启动服务。