web-dev-qa-db-ja.com

バッチファイルの実行中にcmdウィンドウを非表示にする方法は?

バッチファイルの実行中にcmdウィンドウを非表示にする方法は?

次のコードを使用してバッチファイルを実行します

process = new Process();
process.StartInfo.FileName = batchFilePath;
process.Start();
21
Ahmed Atia

Proc.StartInfo.UseShellExecuteがfalseの場合は、プロセスを起動しており、次を使用できます。

proc.StartInfo.CreateNoWindow = true;

Proc.StartInfo.UseShellExecuteがtrueの場合、OSはプロセスを起動しており、次の方法でプロセスに「ヒント」を提供する必要があります。

proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

ただし、呼び出されたアプリケーションは、この後者の要求を無視する場合があります。

UseShellExecute =falseを使用する場合、生成されたすべてのログをキャプチャするために、標準出力/エラーをリダイレクトすることを検討する必要があります。

proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.OutputDataReceived += new DataReceivedEventHandler(ProcessOutputHandler);
proc.StartInfo.RedirectStandardError = true;
proc.ErrorDataReceived += new DataReceivedEventHandler(ProcessOutputHandler);

そして、のような機能を持っています

private void ProcessOutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
   if (!String.IsNullOrEmpty(outLine.Data)) // use the output outLine.Data somehow;
}

MSDNブログCreateNoWindowをカバーする適切なページがあります。

Windowsには、ユーザー名/パスワードを渡した場合にダイアログをスローしてCreateNoWindowを無効にするバグもあります。詳細については

http://connect.Microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=98476http://support.Microsoft.com/?kbid=818858

41
Joel Goodwin

Process properties によれば、

プロパティ:CreateNoWindow
注:コマンドラインプログラムをサイレントで実行できます。コンソールウィンドウは点滅しません。

そして:

プロパティ:WindowStyle
注:これを使用して、ウィンドウを非表示に設定します。著者はProcessWindowStyle.Hidden頻繁に。

例として!

static void LaunchCommandLineApp()
{
    // For the example
    const string ex1 = "C:\\";
    const string ex2 = "C:\\Dir";

    // Use ProcessStartInfo class
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.CreateNoWindow = false;
    startInfo.UseShellExecute = false;
    startInfo.FileName = "dcm2jpg.exe";
    startInfo.WindowStyle = ProcessWindowStyle.Hidden;
    startInfo.Arguments = "-f j -o \"" + ex1 + "\" -z 1.0 -s y " + ex2;

    try
    {
        // Start the process with the info we specified.
        // Call WaitForExit and then the using statement will close.
        using (Process exeProcess = Process.Start(startInfo))
        {
            exeProcess.WaitForExit();
        }
    }
    catch
    {
        // Log error.
    }
}
8
VonC

使用:process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

5
kaizen

これは私にとってうまくいきました、あなたがすべての入力と出力をリダイレクトし、ウィンドウを非表示に設定すると、それはうまくいくはずです

            Process p = new Process();
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.CreateNoWindow = true;
1
Mnyikka