0

現在、単純なアプリケーションを作成していますopenvpn.exe。ただし、openvpn.exeユーザー名とパスワードを要求します。

しかし、これが発生すると、私のプログラムは文字列を読み取らず、CMD が閉じられるまで待機してからコードを続行します。そのため、ウィンドウが閉じられるまでブロックされます。

これを回避する方法はありますか?私のコードは次のとおりです。

void button_Connect_Click(object sender, EventArgs e)
{
    var proc = new Process();


    proc.StartInfo.FileName = @"C:\Program Files (x86)\OpenVPN\bin\openvpn.exe";
    proc.StartInfo.Arguments = "--config config.ovpn --auto-proxy";
    proc.StartInfo.UseShellExecute = false;
    proc.StartInfo.WorkingDirectory = @"C:\Program Files (x86)\OpenVPN\bin";

    // set up output redirection
    proc.StartInfo.RedirectStandardOutput = true;
    proc.StartInfo.RedirectStandardError = true;
    // Input
    proc.StartInfo.RedirectStandardInput = true;

    // Other
    proc.EnableRaisingEvents = true;
    proc.StartInfo.CreateNoWindow = false;
    // see below for output handler
    proc.ErrorDataReceived += proc_DataReceived;
    proc.OutputDataReceived += proc_DataReceived;

    proc.Start();

    myStreamWriter = proc.StandardInput;
    proc.BeginErrorReadLine();
    proc.BeginOutputReadLine();

    proc.WaitForExit();
}

void proc_DataReceived(object sender, DataReceivedEventArgs e)
{
    // output will be in string e.Data
    if (e.Data != null)
    {
        string Data = e.Data.ToString();
        if (Data.Contains("Enter Auth Username"))
        {
            this.myStreamWriter.WriteLine("myinput");
        }
    }
}
4

1 に答える 1

0

新しい行proc_DataReceivedでトリガーされます。コンソール アプリが要求するのはパスワードのみであると仮定すると、プロセスを開始した後、パスワードを右に送信するだけで済みます。バッファリングされ、必要に応じて消費されます。myStreamWriter

于 2012-12-14T16:23:22.313 に答える