0

ユーザー エクスペリエンスを向上させるために、コンソール アプリケーションをラップする GUI があります。Process クラスを使用して、コンソール実行可能ファイルをスピンオフしています。コンソール ウィンドウを表示させたいので、簡略化された出力を手動で書き込みます。次に、実行可能ファイルが終了すると、コンソール ウィンドウが閉じ、制御が GUI に戻ります。

ただし、これは対話型プログラムであるため、StandardIn と StandardOut の両方をリダイレクトする必要があります。問題は、入力をリダイレクトするという行為そのものが、すべての出力がコンソールに送られなくなることです。

すべての出力コードをそのまま含めましたが、コメントアウトしました。そのまま、コンソール ウィンドウが開き、プロンプトが表示され、ユーザーの入力を待ちます。RedirectStandardIn のコメントを外すと、ウィンドウが表示されますが、空白のままです。Process.StandardInput の役割を誤解していますか?

class HandleExecutable
{
    ...

    public void callExecutable(string executable, string args, string inputStr)
    {
        string commandLine = executable;
        ProcessStartInfo psi = new ProcessStartInfo(commandLine);
        psi.UseShellExecute = false;
        psi.LoadUserProfile = false;
        //psi.RedirectStandardOutput = true;
        //psi.RedirectStandardError = true;

        /* UNCOMMENT BELOW WILL CAUSE NO OUTPUT TO BE PUT TO THE CONSOLE */
        //psi.RedirectStandardInput = true;
        psi.WindowStyle = ProcessWindowStyle.Minimized;
        psi.Arguments = args;
        Process p = new Process();
        p.StartInfo = psi;
        try
        {
            p.Start();

            //p.StandardInput.WriteLine(inputStr);
            //p.BeginOutputReadLine();
            //p.BeginErrorReadLine();

            if (outputHandler != null) p.OutputDataReceived += outputHandler;
            if (errorHandler != null) p.ErrorDataReceived += errorHandler;
            p.WaitForExit();
            p.Close();
            p.Dispose();
        }
        catch (Exception ex)
        {
            Console.Error.WriteLine(ex.Message);
        }
    }
}
4

0 に答える 0