我在写一件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 有一个很好的例子。

当你接收过程中创造的事件,您可以问题的系统查询,以确定如果处理是一个孩子(或儿童的儿童等等)的你根本安装喜欢的东西如下:

"SELECT*from Win32_Process在ParentProcessId=".

其他提示

它可能是更好地这样做的内部 do / while 循环:

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

然后迭代过 procs 找出哪些是仍然running...by 使用 HasExited 酒店...

逻辑的是,该进程的子流程都拥有通过你的代码,所以你可以检查第一,如果他们已经退出或不,如果没有,继续循环...

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top