2010-02-09 4 views
7

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

설치가 실제로 완료되기 전에 원래 프로세스로 돌아가는 다른 프로세스를 생성하는 특정 설치 프로그램에 문제가 있습니다. 모든 프로세스가 완료 될 때까지 기다릴 수있는 방법이 있습니까? 여기 명확히하기 위해

내가 함께하는 데 문제가 시나리오입니다 :

  1. 시작 Installer1
  2. Installer1은 /는
  3. 응용 프로그램이 설치 생각하는 또 다른 설치 프로그램 (Installer2)
  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; 
+0

스폰 된 프로세스를 소유하고 있습니까? 예 : 완료를 쉽게 감지 할 수 있다면 Installer2를 수정할 수 있습니까? 또는 다른 사람이 Installer2를 제공했거나 추가 프로세스가 생성되어 임의 생성 프로세스를 처리해야하는지조차 알지 못합니다. – itowlson

+0

우리는 문제의 특정 설치 프로그램을 소유하고 있습니다. 그러나 우리는 또한 임의로 생성 된 프로세스를 처리 할 수 ​​있기를 원합니다. – tjjjohnson

답변

6

WMI를 사용하여이 문제를 해결할 생각이 있습니까?

WMI를 사용하여 프로세스 만들기 및 삭제 이벤트를 수신 대기 할 수 있습니다. 질문 967668에 좋은 예가 있습니다. 당신은 프로세스 생성 이벤트를받을 때 프로세스가 자식 (또는 자녀 등의 자녀) 같은 것을 사용하여 루트 설치의 경우

, 당신은 결정하기 위해 WMI 쿼리를 실행할 수있는 다음 :

" SELECT * FROM Win32_Process WHERE ParentProcessId = ".

+0

그 덕분에 고맙습니다. – tjjjohnson

0

do/while 루프 내에서 이런 식으로 할 더 좋을 수 있습니다

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

는 다음을 통해 반복 HasExited 속성을 사용하여 procs을 실행하여 아직 실행중인 항목을 확인하십시오 ...

그들이가 종료 또는하지 않은 경우하지 않을 경우 먼저 확인 루핑 유지할 수 있도록 프로세스의 하위 프로세스는, 코드에 의해 소유되어있는 논리 ...

희망이, 안부, 톰을하는 데 도움이됩니다.

+0

그게 내가 시작한 것과 같은 이름의 프로세스 목록을 얻습니다. (setup.exe) 그 설정에 의해 생성 된 msiexec.exe 프로세스에 관심이 있습니다. – tjjjohnson

관련 문제