0

コマンドを実行するボタンをクリックします。コマンドは標準入力を要求する場合があり、その入力に応答する必要があります。問題は、プログラムの実行方法が日によって異なる可能性があるため、標準出力を解釈し、それに応じて標準入力をリダイレクトする必要があることです。

標準出力を1行ずつ読み取るこの単純なコードがあり、パスワードのプロンプトが表示されると標準入力が送信されますが、パスワードのプロンプトが表示されないためプログラムがハングしますが、実行するとバッチファイルにはパスワードプロンプトがあります。

このテストを実行するために呼び出しているバッチ ファイルは次のとおりです。

@echo off
echo This is a test of a prompt
echo At the prompt, Enter a response
set /P p1=Enter the Password: 
echo you entered "%p1%"

コマンドラインから実行したときのバッチファイルの出力は次のとおりです。

C:\Projects\SPP\MOSSTester\SPPTester\bin\Debug>test4.bat
This is a test of a prompt
At the prompt, Enter a response
Enter the Password: Test1
you entered "Test1"

ハングしているバッチ ファイルを呼び出すために使用している C# スニペットを次に示します。

    var proc = new Process();
    proc.StartInfo.FileName = "cmd.exe";
    proc.StartInfo.Arguments = "/c test4.bat";
    proc.StartInfo.RedirectStandardOutput = true;
    proc.StartInfo.RedirectStandardError = true;
    proc.StartInfo.RedirectStandardInput = true;
    proc.StartInfo.UseShellExecute = false;
    proc.StartInfo.CreateNoWindow = true;
    proc.Start();
    //read the standard output and look for prompt for password
    StreamReader sr = proc.StandardOutput;
    while (!sr.EndOfStream)
    {
        string line = sr.ReadLine();
        Debug.WriteLine(line);
        if (line.Contains("Password"))
        {
            Debug.WriteLine("Password Prompt Found, Entering Password");
            proc.StandardInput.WriteLine("thepassword");
        }
    }
    sr.Close();
    proc.WaitForExit();

これがデバッグの標準出力です。パスワードのプロンプトが表示されないことに注意してください。これはなぜですか? ハングするだけですか?

This is a test of a prompt
At the prompt, Enter a response

プロンプトの標準出力を監視し、それに応じて反応する方法はありますか?

4

2 に答える 2

0

プロセス クラスを使用すると、バッチ ファイルを直接実行できます。最初に cmd を通過する必要があるため、標準 I/O が通過しない可能性があります

proc.StartInfo.FileName = "test4.bat";
proc.StartInfo.Arguments = "";
于 2013-11-01T03:36:40.330 に答える