0

我正在创建一个窗口服务,它启动一个进程,我在StartInfo.Arguments. 正如预期的那样工作正常。

问题是当我停止 windows 服务时,我需要告诉正在运行的程序在 windows 服务停止之前正常关闭。因为如果我只是终止进程,程序不会保存收集到的数据。我运行的程序是Process Monitor,它接受以下命令"/terminate"

如何/terminate在我的 Windows 服务停止之前传递参数?

4

2 回答 2

0

有几种方法可以接近此解决方案,但您可以向该过程发出信号,并根据您使用此信号发送的内容,它应该执行其“清理”代码。完成后,应该向生成它的进程发出信号,表明它完成了清理代码,然后可以关闭。这当然假设您为 Window 服务和正在生成的进程编写了代码。

您可以尝试命名管道(https://docs.microsoft.com/en-us/dotnet/standard/io/how-to-use-named-pipes-for-network-interprocess-communication

于 2018-06-23T10:16:03.477 回答
0

我设法找到了解决方案。在OnStop()服务的方法中,我需要创建Process Monitor的新实例并传递/Terminate参数:

Process process = new Process();
process.FileName = "\Procmon.exe" ;
process.StartInfo.Arguments = "/AcceptEula /Terminate";
process.Start();

这样,它就会优雅地停止所有Process Monitor实例。

于 2018-06-23T15:30:49.790 回答