2011-10-19 11 views
0

コマンドプロンプトではなく、バッチファイルから呼び出されたかどうかをコンソールアプリケーションに知らせる方法はありますか?コンソールアプリケーションはバッチファイルから呼び出されたことを知ることができますか?

質問する理由は、Console.ReadLineループなどを開始するかどうかを判断して、入力を待つか、すぐに終了するかどうかを判断する方法です。

また、バッチファイルがReadLine経由でさらに入力を待っているコンソールアプリケーションに入力を送信し続ける方法がありますか?

はい、私は知っています - それは2つの質問です。誰かが2番目の質問に対する回答があるとコメントした場合は、別途質問します。

+0

バッチファイルは入力を既に知っていますか、またはユーザーが対話形式で入力する必要がありますか? – ferosekhanj

+0

バッチファイルは既に必要な入力を知っています – rohancragg

答えて

1

バッチファイルは、環境変数を設定することができ、あなたのコンソールアプリケーションであることを確認することができます。

バッチファイルで:あなたのコンソールアプリケーションで

set waitOnDone=0 
yourExeFile -arguments 

var env = System.Environment.GetEnvironmentVariable("waitOnDone"); 
if (String.IsNullOrEmpty(env) || env != "0") 
{ 
    // do something 
} 
+0

これは編集した後にはうまくいきました;-) – rohancragg

+0

私が使用することに決めた解決策であるため、受け入れられました。他の回答も有効でした。ありがとう。 – rohancragg

5

commandline argumentをコンソールアプリケーションに渡して、すぐに終了するのか待機するのかを判断してください。

+0

良い提案 - 私はそれを考えていました。 – rohancragg

1

可能性としては、バッチファイルからのリダイレクトがある場合は、stdinからのみ読み込むことです。

これは、入力ストリームがあるかどうかを検出することによって(ドットネットを使用して)解決することもできます。 @Hans Passantから

ソリューション、SO: how to detect if console in stdin has been redirected

using System.Runtime.InteropServices; 

public static class ConsoleEx 
{ 
    public static bool OutputRedirected 
    { 
     get { return FileType.Char != GetFileType(GetStdHandle(StdHandle.Stdout)); } 
    } 
    public static bool InputRedirected 
    { 
     get { return FileType.Char != GetFileType(GetStdHandle(StdHandle.Stdin)); } 
    } 
    public static bool ErrorRedirected 
    { 
     get { return FileType.Char != GetFileType(GetStdHandle(StdHandle.Stderr)); } 
    } 

    // P/Invoke: 
    private enum FileType { Unknown, Disk, Char, Pipe }; 
    private enum StdHandle { Stdin = -10, Stdout = -11, Stderr = -12 }; 
    [DllImport("kernel32.dll")] 
    private static extern FileType GetFileType(IntPtr hdl); 
    [DllImport("kernel32.dll")] 
    private static extern IntPtr GetStdHandle(StdHandle std); 
} 

とバッチファイルは、ファイルに入力を保存して、あなたのプログラムにそれを送り、入力を知っている場合、それはこの

if (ConsoleEx.InputRedirected) 
{ 
    string strStdin = Console.In.ReadToEnd(); 
} 
+2

アトリビューションが必要なので、作者のプロフィールへのリンクや回答へのリンクを提供せずに、単に回答をコピーすることはできません。 –

+0

私はこれを試しましたが、ConsoleEx.InputRedirectedが真であるシナリオを生成できないようですか?バッチファイルにはMyApp.exe -argテストが含まれています – rohancragg

+0

@Hans Passant:正しいですが、私のソースからコピーしました。元のSOのリンクはもう見つかりません。 – jeb

1

ように使用することができますlike

prog.exe <argument.txt 

バッチファイル。私はあなたがこれのソースコードを変更する必要はないと思う。

関連する問題