运行批处理文件时如何隐藏cmd窗口?

我使用以下代码运行批处理文件

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

最佳答案

如果proc.StartInfo.UseShellExecute是 false ,那么您正在启动该过程,可以使用:

proc.StartInfo.CreateNoWindow = true;

如果proc.StartInfo.UseShellExecute为 true ,则操作系统正在启动进程,您必须通过以下方式为进程提供“提示”:
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;
}

an MSDN blog上有一个涵盖CreateNoWindow的好页面。

Windows中还有一个错误,如果您传递用户名/密码,则该错误可能会引发对话框并破坏CreateNoWindow。详情

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

10-05 22:08