我正在寻找一种可靠的方法来确定是否可以在不丢失数据或损坏数据的情况下停止服务,或者如果可以通过 powershell 终止服务,则常规停止是否会起作用。
我考虑观察服务的文件句柄,看看服务是否正在从工作目录中写入或读取某些内容。我是否可以通过 powershell 查询其他内容,以查看服务是否仍在处理数据。
答案1
确定服务是否可以停止或终止的最“可靠”方法是分析其源代码,看它是否能正确处理关闭或停止事件。
其次最好的是使用调试器附加到它并在重要事件周围设置断点。
您没有告诉我们这项服务的作用或工作原理,但是如果您想查看进程在正常运行期间打开了哪些文件句柄,我认为 Sysinternals 的 Process Explorer 是最简单的方法。您还可以使用 Process Monitor 实时查看文件系统活动,并将结果筛选为您想要查看的进程。
如果服务编写正确,它将在进程退出之前(通过服务管理器关闭时)以某种优雅的方式释放所有资源,或者至少释放那些如果没有释放就会导致数据丢失的资源。
sc query your-service
将为您提供服务经理想该服务具有这样的功能,但是最终还是取决于该服务的编写方式,以及该功能是否得到正确实现。
编辑:当您尝试停止时您的服务挂起,这告诉我它写得不正确。
编辑:哦,还有最后一件事,如果你想用这个做一些脚本,handle.exe 是一个用于监控句柄的命令行程序。你可以解析它的输出。所有这些 Sysinternals 实用程序都位于 WebDAV 共享 \live.sysinternals.com\Tools\ 上