【问题标题】:Breaking away a process started from C#分离从 C# 开始的进程
【发布时间】:2011-12-16 07:19:39
【问题描述】:

我有一些使用System.Diagnostics.Process.Start 来启动子进程的现有代码。它还使用ProcessStartInfo.RedirectStandardOutput 来捕获该进程的输出流。这一切都很好。

我还需要将它附加到job object。我也有执行此操作的代码,只要该进程尚未附加到作业,它就可以正常工作。

不幸的是,情况并非总是如此,所以我需要使用CREATE_BREAKAWAY_FROM_JOB 标志创建进程。这就是我卡住的地方。

在我看来,从这里开始有两种可能的方式:

  1. 以某种方式说服Process.Start 传递一个额外的小标志。
  2. 放弃Process 类,退回到原始CreateProcess,并(以某种方式)重做输出重定向。

我不确定如何做这些,或者是否有一些中间立场也可能有效。有没有其他人遇到过这个并有一些想法/代码?

【问题讨论】:

  • 如何将流程附加到作业?是否可以以类似的方式将进程与作业分离?
  • 我正在使用AssignProcessToJobObject。可悲的是,工作是单向的——一旦一个进程被分配给一个工作,它就不能被取消分配,除非你可以将该标志传递给CreateProcess,否则子进程将继承其父进程的工作。

标签: c# .net winapi process redirectstandardoutput


【解决方案1】:

目前,我选择了选项 #2。我想我已经弄清楚了如何进行输出捕获,尽管我还没有进行广泛的测试。

不过,仍然对替代想法感兴趣。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    相关资源
    最近更新 更多