2011-01-10 29 views
0

サービスを停止するメソッドがありますが、ログも削除する必要があります。通常これは問題ではありませんが、プロセスを閉じるまでに少し時間がかかることがあります。この場合も、サービスは停止しているように見えますが、プロセスを正常に閉じるためにさらに時間がかかります。プロセスはまだ実行されているので、ログを削除することはできません。したがって、ログを削除するのが安全かどうかを.exeを監視する方法を見つける必要があります。リモートプロセスの監視

これまでのところ私の最善の選択肢はdo whileループです。残念ながら、deleteステートメントの最初の反復で例外がスローされ、プログラムが停止します。

do 
{ 
// delete logs 
} 
while (System.Diagnostics.Process.GetProcessesByName(processName, machineName).Length > 0); 

確かに単純な解決策がありますが、私の経験不足は本当の問題です。

答えて

1

これはどちらか、おそらく最良の答えではないですが、あなたは、ループを反転できます。私は、これは内容を実行する前に、ループの条件をevalutateうとします

while (System.Diagnostics.Process.GetProcessesByName(processName, machineName).Length > 0) 
{ 
    // delete log files. 
} 

。しかし、あなたの声明によれば、プロセスが終了するまでコードは実行されません。

この周りハック方法は、ループを実行し、条件いったん手動で分割することです:

bool CloseProcessOperation = true; // Control variable incase you want to abort the loop 
while (CloseProcessOperation) 
{ 
    if (System.Diagnostics.Process.GetProcessesByName(processName, machineName).Length > 0) { break; } 
    // break if no logs exist 
    // break for some other condition 
    // etc 

    // delete logs 
} 
+0

正しい、これに伴う問題は、プロセスがとても「を削除実行中に長さが1であるということですプロセスが停止した後に呼び出されない限り、ログコードは実行されません。それは私が必要とするプロセスが終了するのを待つことはありません。 – Ryan

+0

'<' to a '>'は変更できませんでしたか?これは、ループの内容を実行する前に終了条件をチェックする点を除いて、あなたが投稿した例と同じロジックを持っています。 –

+0

gregありがとう、本当に感謝しています。 – Ryan