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

时间:2009-07-08 07:22:29

标签: c# process batch-file

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

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

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

5 个答案:

答案 0 :(得分:40)

如果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

答案 1 :(得分:8)

根据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.
    }
}

答案 2 :(得分:5)

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

答案 3 :(得分:1)

这对我有用, 当您重定向所有输入和输出,并将窗口设置为隐藏时,它应该工作

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

答案 4 :(得分:0)

尝试使用thisthis,其中将c#代码嵌入批处理文件中:

<div id="mainContainer">
    <div id="formContainer">
        <form id="contact" style="width:100%" action="" method="post">
         <div style="width:50%; float:left;">
          <input placeholder="First name" type="text">
          <input placeholder="Last name" type="text">
          <input placeholder="Address 1" type="text">
          <input placeholder="Address 2" type="text">
          <input placeholder="City" type="text">
          <input placeholder="State" type="text">
          <input placeholder="ZIP" type="text">
          <input placeholder="Your Phone Number" type="tel">
          <input placeholder="Your Web Site" type="url">
          </div>
          <div style="width:50%; float:right;">
          <input placeholder="Room Preference" type="text">
          <input placeholder="Smoking" type="text">
          <input placeholder="Number of Guest" type="text">
          <input placeholder="Date" type="text">
          </div>
          <button name="submit" type="submit" id="contact-submit" data-submit="...Sending">Submit</button>
        </form>
    </div>
</div>

尽管取消隐藏窗口可能不是那么容易。