【问题标题】:.NET Process.Start() close event from child process来自子进程的 .NET Process.Start() 关闭事件
【发布时间】:2019-09-08 07:48:00
【问题描述】:

我正在尝试从我开始的进程接收关闭事件

p1.EnableRaisingEvents = True
AddHandler p1.Exited, AddressOf p1Exited
System.Diagnostics.Process.Start(p1)

但是,p1 本身会启动一个新进程 p2,然后立即关闭并触发 close 事件。进程 p2 有一个 GUI 并继续运行。 p2 只能从 p1 开始。我想从 p2 获取关闭事件。这有可能吗?

【问题讨论】:

    标签: .net process


    【解决方案1】:

    如果可以编辑p1 进程以等待p2 完成 - 这将是最简单的解决方案。在这种情况下,您可以在 'no window' mode 中启动 p1 并等待其完成。

    如果这不可能,那么您仍然可以使用process parent id 找到由p1 启动的所有进程:

    p1.WaitForExit();
    var p1Id = p1.Id;
    var subProcesses = Process.GetProcesses().Where(p => {
        var indexedName = ProcessExtensions.FindIndexedProcessName(p.Id);
        var parentIdCounter = new PerformanceCounter("Process", "Creating Process ID", indexedName);
        var parentId = (int)parentIdCounter.NextValue();
        return parentId == p1Id;
    }).ToArray();
    subProcesses.Select(_ => _.Id).ToList().ForEach(Console.WriteLine);
    

    如果您知道 UI 应用程序名称并且不能为用户启动超过 1 个应用程序,那么您可以忽略父 id 检查并仅通过其名称查找进程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      相关资源
      最近更新 更多