我正在尝试将修补程序部署到我创建的服务并替换服务文件。
出于这个原因,我需要停止服务,以便释放文件。
我正在使用sc \\remote stop svcname
,然后我使用sc \\remote query svcname
查询服务,直到我看到它的状态为STOPPED。
此时应该解锁服务文件,为了安全起见,我还使用sc \\remote delete svcname
删除了服务。
但是,它似乎没有释放文件,任何删除或更改尝试都失败了。 我知道一个解决方案可能是重复轮询文件,但我想避免使用这种方法。
有什么建议吗?
答案 0 :(得分:3)
Windows不确保在服务停止时提供服务的进程终止(该进程可能提供多个服务)。它只是在处理发送给它的消息时认为服务已停止。
因此,如果服务进程存在错误并且未正确释放资源,则可能仍会锁定它们。我可能会等一下,而不是简单地终止这个过程。
Microsoft还有一个名为handle.exe的工具(这是命令行版本,它们也有一个GUI),可以列出哪些进程保持文件打开。应该可以以编程方式获取相同的信息,但我不确定要进行的确切调用(并且您需要管理员权限;您也必须将它们提供给该工具)。这样你可以检查文件是否打开,通过哪个进程等待它终止或强制终止它,如果你不知道它是哪一个。