自動化を使用してアプリケーションをテストしていますが、バッチ ファイルを使用してアプリケーションを起動したい場合があります。「process.WaitForInputIdle(100)」を実行すると、エラーが発生します。
「WaitForInputIdle が失敗しました。これは、プロセスにグラフィカル インターフェイスがないことが原因である可能性があります。」
プロセスにグラフィカル インターフェイスがあるかどうかを確認するにはどうすればよいですか?
自動化を使用してアプリケーションをテストしていますが、バッチ ファイルを使用してアプリケーションを起動したい場合があります。「process.WaitForInputIdle(100)」を実行すると、エラーが発生します。
「WaitForInputIdle が失敗しました。これは、プロセスにグラフィカル インターフェイスがないことが原因である可能性があります。」
プロセスにグラフィカル インターフェイスがあるかどうかを確認するにはどうすればよいですか?
Environment.UserInteractiveを参照してください。これにより、プロセスにインターフェイスがあるかどうかが識別されます。たとえば、サービスはユーザーと対話できません。
グラフィカル インターフェイスがあるかどうかを示す Process.MainWindowHandleを見ることもできます。
これら 2 つのチェックを組み合わせることで、すべての可能性をカバーする必要があります。
例外をキャッチしてキャッチするだけです。
Process process = ...
try
{
process.WaitForInputIdle(100);
}
catch (InvalidOperationException ex)
{
// no graphical interface
}
私はこの線に沿って考えていました, まだ醜いですが、例外を避けようとしています.
Process process = ...
bool hasUI = false;
if (!process.HasExited)
{
try
{
hasUI = process.MainWindowHandle != IntPtr.Zero;
}
catch (InvalidOperationException)
{
if (!process.HasExited)
throw;
}
}
if (!process.HasExited && hasUI)
{
try
{
process.WaitForInputIdle(100);
}
catch (InvalidOperationException)
{
if (!process.HasExited)
throw;
}
}