ある時点で、私はmsiexec
プロセスの起動とその終了のイベントをキャッチする必要があります。私のコードは通常のユーザー権限で動作しています。 msiexec
プロセスはWindowsによってシステム特権で開始されるため、Refresh()
を実行して、そのプロセスのHasExited
プロパティを確認することはできません。Process.GetProcessesByName( "msiexec")が間違った結果を表示するのはなぜですか?
while (true) {
Process[] msi = Process
.GetProcessesByName("msiexec");
if (msi.Length > 0) break;
}
// The `msiexec` is launched. Now to wait its finishing...
while (true) {
Process[] msi = Process
.GetProcessesByName("msiexec");
if (msi.Length == 0) break; // Here is `false` always!
}
// Components was installed.
しかし、二while
ループは常にmsiexec
が完成する予定msi.Length == 1
た後も示しています。それはなぜ起こるのですか?どうすれば解決できますか?
によって低下するまで、その後、待つのか?あなたはこれを100%確信していますか?もしそうなら、あなたは.NETでバグを見つけました。 – aquinas
ループを使用する代わりに、プロセスを見つけた後に 'WaitForExit()'メソッドを呼び出すことはできませんか? –
@ChrisDunaway、それは動作しません。私はこのテーマを作成する前にそれを試しました。問題は、 'msiexec'がシステム権限で動作することです。 –