1

我正在尝试将补丁部署到我创建的服务并替换服务文件。出于这个原因,我需要停止服务以便释放文件。我正在使用sc \\remote stop svcname,然后我使用 查询服务,sc \\remote query svcname直到我看到它的状态为 STOPPED。此时服务文件应该已解锁,为了安全起见,我还使用sc \\remote delete svcname.

尽管如此,它似乎并没有释放文件,并且任何删除或更改尝试都失败了。我知道一种解决方案可能会反复轮询文件,但我想避免这种方法。

有什么建议么?

4

1 回答 1

4

Windows 不确保提供服务的进程在服务停止时终止(该进程可能提供多个服务)。它只是在处理发送给它的消息时认为服务已停止。

所以如果服务进程有bug,没有正确释放资源,仍然有可能被锁定。我可能会稍等片刻,而不是简单地终止该过程。

微软还有一个名为handle.exe的工具(这是命令行版本,他们也有一个 GUI-one),它可以列出哪些进程保持文件打开。应该可以以编程方式获取相同的信息,但我不确定要进行的确切调用(并且您需要管理员权限;您也必须将它们提供给该工具)。这样,您可以检查文件是否打开,由哪个进程打开,如果您不知道它是哪个进程,则等待它终止或强制终止它。

于 2012-08-20T10:36:32.627 回答