关闭Windows服务时将cmd参数传递给正在运行的进程

时间:2018-06-23 09:40:23

标签: c# cmd windows-services process-monitor

我正在创建一个启动窗口服务的窗口服务,在该过程中我在StartInfo.Arguments中传递了多个cmd参数。可以按预期工作。

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

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

2 个答案:

答案 0 :(得分:0)

有两种方法可以解决此问题,但是可以向过程发出信号,并且根据您通过此信号发送的内容,应执行其“清理”代码。完成后,应告知产生它的进程已完成清理代码,然后可以关闭。当然,这假定您为Window服务和正在生成的进程都编写了代码。

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

答案 1 :(得分:0)

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

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

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