【问题标题】:Pass cmd argument to running process when shutting down windows service关闭 Windows 服务时将 cmd 参数传递给正在运行的进程
【发布时间】:2018-06-23 09:40:22
【问题描述】:

我正在创建一个窗口服务,它启动一个进程,我在 StartInfo.Arguments 中传递多个 cmd 参数。按预期效果很好。

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

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

【问题讨论】:

  • 使用IDisposable模式,当调用windows服务onStop时,你应该调用你所有服务的dispose!该服务之一负责运行该 Procss 命令,该进程应实现 IDisposable 并在那里执行操作
  • @omriman12 谢谢!我会检查并回复您。
  • @omriman12 我似乎无法理解这一点。你有更多信息的链接吗?代码示例.. 谢谢!

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-08
      • 2021-06-29
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 2023-03-14
      • 2011-09-07
      • 1970-01-01
      相关资源
      最近更新 更多