2017-12-26 12 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(); 

どうすればいいですか?イベント「終了」は起こりません。

実際にp.EnableRaisingEvents = trueが存在しないことが問題でした。正しいコードは:

+0

「終了」機能とは何ですか? –

+0

p.EnableRaisingEvents = true; –

+1

'' Process'オブジェクトに関連するすべてのリソースを解放する 'p.Close()'を呼び出しています。これには、プロセス状態を監視し、 'Exited'イベントを発生させるためのリソースも含まれます。だから、 '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 
} 
関連する問題