C#检测产生的进程

我正在编写一段c#代码,用于启动安装程序并在继续使用其他内容之前等待它返回。

我遇到某些安装程序出现问题,这些安装程序在安装实际完成之前返回原始进程的其他进程。 有什么方法可以等到所有流程完成后?

为了澄清这里我遇到麻烦的情况:

  1. 启动Installer1
  2. Installer1生成/启动另一个安装程序(Installer2)
  3. 安装程序1返回
  4. 应用程序认为安装已完成但Installer2仍在运行。 这会导致应用程序中的工作流问题。

这是我目前正在使用的代码:

// launch installer Process process = windowsApplicationLauncher.LaunchApplication(_localFilePath); // wait for process to return do { if (!process.HasExited) { } } while (!process.WaitForExit(1000)); if (process.ExitCode == 0) { _fileService.MoveFile(_localFilePath, _postInstallFilePath); _notification.SetComplete(false); return true; } return false; 

您是否考虑过使用WMI来解决这个问题?

您可以使用WMI侦听进程创建和删除事件。 问题967668有一个很好的例子。

当您收到进程创建事件时,您可以发出WMI查询以确定该进程是否是您的根安装程序的子进程(或子进程的子进程),具有以下内容:

“SELECT * FROM Win32_Process WHERE ParentProcessId =”。

do / while循环中以这种方式执行它可能更好:

 System.Diagnostics.Process [] procs = System.Diagnostics.Process.GetProcessesByName(proc.ProcessName,Environment.MachineName);

然后通过使用HasExited属性遍历procs以找出哪个仍在运行…

逻辑是进程的子进程由您的代码拥有,因此您可以先检查它们是否已退出,如果没有,则继续循环…

希望这会有所帮助,最好的问候,汤姆。