我正在编写一段c#代码,用于启动安装程序并在继续使用其他内容之前等待它返回。
我遇到某些安装程序出现问题,这些安装程序在安装实际完成之前返回原始进程的其他进程。 有什么方法可以等到所有流程完成后才会结束?
为了澄清这里我遇到问题的情况:
这是我目前正在使用的代码:
// 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;
答案 0 :(得分:6)
您是否考虑过使用WMI解决此问题?
您可以使用WMI监听进程创建和删除事件。问题967668就是一个很好的例子。
当您收到流程创建事件时,您可以发出WMI查询以确定该流程是否是您的根安装程序的子项(或子项的子项等),具有以下内容:
“SELECT * FROM Win32_Process WHERE ParentProcessId =”。
答案 1 :(得分:0)
在do
/ while
循环内执行此操作可能会更好:
System.Diagnostics.Process[] procs = System.Diagnostics.Process.GetProcessesByName(proc.ProcessName, Environment.MachineName);
然后使用procs
属性遍历HasExited
以找出仍在运行的内容......
逻辑是进程的子进程由您的代码拥有,因此您可以先检查它们是否已退出,如果没有,则继续循环...
希望这有帮助, 最好的祝福, 汤姆。