题
我在写一件c#码启动一个程序和等待返回之前继续与其他东西。
我有麻烦的某些安装人员产生的其他进程与原进程返回之前,安装已实际完成。 是否有某种方式我可以等待,直到所有的进程已经完成了吗?
澄清这里的情景我有麻烦:
- 启动Installer1
- Installer1产生的/启动了另一个安装(Installer2)
- 安装1返回
- 应用程序认为安装已经完成,但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
酒店...
逻辑的是,该进程的子流程都拥有通过你的代码,所以你可以检查第一,如果他们已经退出或不,如果没有,继续循环...
希望这会有所帮助, 最好的问候, 汤姆。
不隶属于 StackOverflow