2017-11-14 17 views
0

C#コンソールアプリケーションを一時停止するにははユーザーが実行していますか?C#コンソールアプリケーションを一時停止するには(ユーザーが実行している場合のみ)

私は、readlineなどを使って正しくデバッグすることを学ぶことを推奨するスタックオーバーフローで同様の問題を検索しましたが、プロセスが自動システムで実行されているインスタンスをカバーしていませんすなわち、ユーザが画面を読むことを可能にするために一時停止しない)。

コンソールがインタラクティブに実行されているのか、スクリプトによって実行されているのかをどのように判断できますか?これは、Linuxシステム上のbashた

場合、私はあなたが誰かが対話ユーザーとしてログインしているかどうかを確認する必要が

https://www.gnu.org/software/bash/manual/html_node/Is-this-Shell-Interactive_003f.html

+0

"直進し続ける必要がある自動化されたシステムによって実行される"とはどういう意味ですか?例えば、 – Enigmativity

+0

。バックグラウンドでのバッチスクリプト、別のプロセスであり、コンソールでユーザーが直接実行することはありません。 –

+0

「直進しなければならない」という意味は何ですか? – Enigmativity

答えて

0

Console.OpenStandardInput(1)は、コンソールアプリケーションが対話形式で実行されていない場合はStream.Nullを返します。

private static void pause() 
    { 
     if (Console.OpenStandardInput(1) != Stream.Null) 
     { 
      Console.Out.WriteLine("Press any key to continue"); 
      Console.ReadKey(); 
     } 
    } 
0

ような何かを行うことができますが、これは、ほとんどのサービスで使用するためです。そのような用語がログインしているユーザーを偽装していると言われているため、「自動化」されたシステムもあります。

で入手可能ないくつかの提案があります。 Check if no user is currently logged on to Windows

は、おそらく最も簡単な方法は、(あなたはWMIのAPIに依存したくない場合は特に)ここに示すように、P /呼び出しコールを介してユーザのセッションを列挙することです。 http://www.pinvoke.net/default.aspx/wtsapi32/WTSEnumerateSessions.html

4

コマンドライン引数を使用するのが最も簡単な方法です。たとえば、programがコマンドラインパラメータ "-automatic"で実行されている場合、プログラムは停止せずに実行できます。そのようなパラメータプログラムがなければ、対話モードで動作し、ユーザ入力を期待するでしょう。

これは、多くのコマンドラインユーティリティで使用されるかなり標準的なアプローチです。

関連する問題