2017-12-26 26 views
-1

WPF/C# 응용 프로그램에서 일부 스크립트 (예 : VBScript)를 실행하고 스크립트 실행이 끝난 후 닫으려고합니다.Process.Exited에 대해 프로그램이 반응하지 않습니다.

 string scriptName = "test.vbs"; 
     int abc = 2; 
     string name = "Script"; 

     ProcessStartInfo ps = new ProcessStartInfo(); 
     ps.FileName = "cscript.exe"; 
     ps.Arguments = string.Format("\"{0}\" \"{1}\" \"{2}\"", scriptName, abc, name); 

     Process p = new Process();    
     p.StartInfo = ps; 
     p.Exited += this.End; 
     p.Start(); 
     p.Close(); 

어떻게하면됩니까? "Exited"이벤트가 발생하지 않습니다.

실제로 p.EnableRaisingEvents = true가 부재 한 것이 문제였습니다. 올바른 코드 :

 Process p = new Process(); 
     p.EnableRaisingEvents = true; 
     p.StartInfo = ps; 
     p.Exited += this.End; 
     p.Start(); 
+0

'종료'기능이란 무엇입니까? –

+0

p.EnableRaisingEvents = true; –

+1

프로세스 상태를 모니터하고'Exited' 이벤트를 발생시키는 것을 포함하여'Process' 오브젝트와 관련된 모든 자원을 해제하는'p.Close()'를 호출하고 있습니다. 그래서,'Close()'를 호출하지 말아라. (최소한, 객체를 다 끝내기 전까지는!). 그리고, EnableRaisingEvents를 설정하십시오. –

답변

2

완료 될 때까지 기다리기 전에 프로세스를 닫습니다.

p.WaitForExit() (프로세스가 실행되는 동안 다른 작업을 병렬로 수행하고 싶지 않은 경우)이 경우 프로세스가 완료 될 때까지 기다리는 더 좋은 방법 인 것 같습니다.

using (Process p = new Process()) 
{ 
    p.StartInfo = ps; 
    p.Start(); 
    p.WaitForExit(); 
    // Do whatever you want to do after the process has finished 
}