문제

설치 프로그램을 시작하고 다른 물건을 계속하기 전에 돌아올 때까지 기다리는 C# 코드를 작성하고 있습니다.

설치가 실제로 완료되기 전에 원래 프로세스가 반환 된 다른 프로세스를 생성하는 특정 설치 업체에 문제가 있습니다. 모든 프로세스가 끝날 때까지 기다릴 수있는 방법이 있습니까?

여기에 내가 문제가있는 시나리오를 명확히하기 위해 다음과 같습니다.

  1. installer1을 시작하십시오
  2. Installer1 Spawns/Launchs 다른 설치 프로그램 (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 *에서 win32_process에서 parentprocessid =".

다른 팁

내부에서 이런 식으로하는 것이 더 나을 수도 있습니다. do / while 고리:

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

그런 다음 반복하십시오 procs 여전히 실행 중인지 알아 내기 위해 ... HasExited 재산...

논리는 프로세스의 하위 프로세스가 코드에 의해 소유된다는 것이므로, 그렇지 않은 경우 계속 루핑을 종료했는지 여부를 먼저 확인할 수 있습니다 ...

이것이 도움이되기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top