バッチファイルの実行中にcmdウィンドウを非表示にする方法は?
次のコードを使用してバッチファイルを実行します
process = new Process();
process.StartInfo.FileName = batchFilePath;
process.Start();
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
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.
}
}
使用:process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
これは私にとってうまくいきました、あなたがすべての入力と出力をリダイレクトし、ウィンドウを非表示に設定すると、それはうまくいくはずです
Process p = new Process();
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;