2013-08-24 2 views
-2

그래서 저는 프로그램을 작성하고 있습니다.다른 응용 프로그램이 닫히면 하나의 응용 프로그램을 닫은 다음 닫습니다.

namespace ConsoleApplication4 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      System.Diagnostics.Process.Start(@"C:\\Windows\\ehome\\ehshell.exe"); 
      System.Diagnostics.Process.Start(@"E:\\Xpadder\\WMC.xpaddercontroller"); 
     } 
    } 
} 

모두 두 파일을 엽니 다. 내가하고 싶은 일은 ehshell.exe가 실행을 멈출 때까지 기다렸다가 다른 프로그램 (이 경우에는 xpadder)도 강제 종료 될 때까지 기다릴뿐입니다.

나는 이것을하기위한 코드를 찾았지만, C#에서 최고가 아니며 내가 무엇을 찾고 있는지 확실하지 않다!

+0

는 구글 검색 엔진에 단어 'C#을 모니터 process'을 넣어 얼마나 어려운가? 10Mil을 쉽게 얻을 수 있습니다. results .. – walther

+0

@walther Google은 모든 검색어에 대해 1000 개가 넘는 결과를 제공하지 않습니다. – Paulpro

+0

http://stackoverflow.com/a/12015686/495455 –

답변

1
 var p1 = new ProcessStartInfo 
     { 
      FileName = atomicParsleyFile, 
      Arguments = atomicParsleyCommands, 
      WindowStyle = ProcessWindowStyle.Hidden, 
      UseShellExecute = false, 
      CreateNoWindow = true, 
      RedirectStandardOutput = true 
     }; 

     var proc = new Process { StartInfo = p1 }; 

     if (!proc.Start()) 
     { 
      throw new ApplicationException("Starting atomic parsley failed!"); 
     } 

        /*Repeat above for second process here */ 

     Console.WriteLine(proc.StandardOutput.ReadToEnd()); 

     proc.WaitForExit(); //Run AtomicParsley and Wait for Exit 
        proc2.Kill(); 
+0

아마 그보다 짧을 수도 있지만 이전에했던 일에서 찢어 버린 것입니다. 위의 옵션을 그대로 사용해야했습니다. 프로그램이 많은 양의 데이터를 출력 할 것으로 예상된다면, 표준 출력을 리다이렉트 시키거나 읽지 않고 작은 덩어리로 출력해야한다. –

0
static void Main(string[] args) 
    { 
     System.Diagnostics.Process p1 = System.Diagnostics.Process.Start(@"C:\\Windows\\ehome\\ehshell.exe"); 
     System.Diagnostics.Process p2 = System.Diagnostics.Process.Start(@"E:\\Xpadder\\WMC.xpaddercontroller"); 
     p1.Exited += (s,e) => { 
      if(!p2.HasExited) p2.Kill(); 
     }; 

    } 
관련 문제