我正在寻找一种可靠的方法来确定服务是否可以停止或杀死

我正在寻找一种可靠的方法来确定是否可以在没有数据丢失或损坏的情况下停止服务,或者如果可以通过PowerShell终止服务,常规停止将会起作用。

我想要观看服务的文件句柄,看看服务是否正在写或从那里读取工作目录。 有什么我可以通过PowerShell查询,看看服务是否仍在处理数据。

确定一个服务是否可以被停止或被终止的最“健壮”的方法是分析它的源代码,看它是否正确地处理closures或停止事件。

接下来最好的是用一个debugging器附加它,并为重要事件设置断点。

你不告诉我们这个服务是做什么的,或者它是如何工作的,但是如果你想看看在正常的操作过程中打开了哪个文件,我认为Sysinternals的Process Explorer是最简单的方法。 您还可以使用Process Monitor实时查看文件系统活动,并将结果过滤到您想要查看的进程中。

如果服务写得不错,在进程退出之前(通过服务pipe理器closures的时候)会以某种优雅的方式解除所有的资源,或者至less那些会导致数据丢失的资源。

sc query your-service会给你什么服务pipe理器认为该服务是有能力的,但是最终也取决于如何写这个服务是否正确实现了function。

编辑:当你试图阻止它时,你的服务会挂起,告诉我它没有正确写入。

编辑:哦,还有最后一件事,如果你想用这个scripty做一些事情,handle.exe是一个命令行程序来监视句柄。 你可以parsing它的输出。 所有这些Sysinternals实用程序都在WebDAV共享\ live.sysinternals.com \ Tools \