2012-04-12 34 views
2

なぜProcess.WaitForExitは待機しないのですか?なぜProcess.WaitForExitが待機しないのですか?

static void Main(string[] args) 
    { 
     while (true) 
     { 
      try 
      { 
       if (Process.GetProcessesByName("ServerAPPFileManager").Length > 0) 
       { 
        Process clsProcess = Process.GetProcessesByName("ServerAPPFileManager")[0]; 
        Console.WriteLine(clsProcess.ProcessName); 
        clsProcess.WaitForExit(); 
       } 
       if (System.IO.File.Exists(System.IO.Path.Combine(Environment.CurrentDirectory, "ServerAPPFileManager.exe"))) 
       { 
        Console.WriteLine("File Found"); 
        Process p = new Process(); 
        p.StartInfo.Verb = "runas"; 
        p.StartInfo.FileName = System.IO.Path.Combine(Environment.CurrentDirectory, "ServerAPPFileManager.exe"); 
        p.Start(); 
       } 
      } 
      catch(Exception e) 
      { 
       Console.Write(e.Message); 
       System.Threading.Thread.Sleep(1000); 
      } 
     } 
    } 

繰り返してアプリケーションを何度もやり続ける!

編集:

それがこのclsProcess.WaitForExit(1000);

答えて

5

このコードはwhile(true)ループに包まれているようだったので、それは働いていなかった、今働いていたと以内にbreakthrowまたはreturn文が存在しませんループの本体。実際には無限ループに陥ります。

WaitForExitが終了したらループを終了するには、breakステートメントを導入する必要があります。

clsProcess.WaitForExit(); 
break; 
+0

しかし、どのようなWaitForExist ..それはコードをブロックしないのですか? –

+0

@MurHafSozアプリケーションが終了するまでコードを壁ブロックします。一度終了すると、コードは再び実行され始めます。 – JaredPar

+0

だから私は 'while(true)'を保ち、単に 'break;'を追加しますか? –

0

if (Process.GetProcessesByName("ServerAPPFileManager").Length > 0)がfalseを返さないことを確認します。

+0

falseを返しません。もしそうであれば、アプリケーションを起動し、ループが再び始まるとtrueを返します。 –

0

これはコード化した方法です。それは終了を待っています、そして、非常に次のif文でそれを再び開始します。そして、Jaredが指摘したように、それは途切れることのないようにループし続けます。それを開始し、終了するのを待ってからもう一度起動します

+0

私はそれがループすることを知っているが、私の問題はそれがアプリケーションがまだ実行中でも、ループを待つことはありません。 –

0

問題は、作成したProcessオブジェクトでWaitForExitを呼び出すのではなく、Process.GetProcessesByNameから返されたProcessオブジェクト()。代わりに、試してみてください。

Process p = new Process(); 
// etc 
p.Start(); 
p.WaitForExit(); 
0

はprocess.responding = trueの場合は、その後、他の待って強制的かどうかを検証、そうでない場合は再度プロセスを呼び出して、真= while文でそれを削除し、タイマーでそれを追加します。.. process.hasexitedかどうかを検証プロセスを殺す

関連する問題