11

自動化を使用してアプリケーションをテストしていますが、バッチ ファイルを使用してアプリケーションを起動したい場合があります。「process.WaitForInputIdle(100)」を実行すると、エラーが発生します。

「WaitForInputIdle が失敗しました。これは、プロセスにグラフィカル インターフェイスがないことが原因である可能性があります。」

プロセスにグラフィカル インターフェイスがあるかどうかを確認するにはどうすればよいですか?

4

4 に答える 4

10

Environment.UserInteractiveを参照してください。これにより、プロセスにインターフェイスがあるかどうかが識別されます。たとえば、サービスはユーザーと対話できません。

グラフィカル インターフェイスがあるかどうかを示す Process.MainWindowHandleを見ることもできます。

これら 2 つのチェックを組み合わせることで、すべての可能性をカバーする必要があります。

于 2010-09-24T09:21:33.710 に答える
1

例外をキャッチしてキャッチするだけです。

Process process = ...
try
{
    process.WaitForInputIdle(100);
}
catch (InvalidOperationException ex)
{
    // no graphical interface
}
于 2010-09-24T09:29:21.617 に答える
1

私はこの線に沿って考えていました, まだ醜いですが、例外を避けようとしています.

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;
    }
}
于 2010-09-24T11:25:16.130 に答える