Как скрыть окно cmd при запуске командного файла?

Как скрыть окно cmd при запуске командного файла?

Я использую следующий код для запуска командного файла

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

Ответы на вопрос(4)

    process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

 Ahmed08 июл. 2009 г., 10:18
Иногда работает, другие нет. Это зависит от команд файла bat?

Свойства процесса, у вас есть:

Property: CreateNoWindow
Notes: Allows you to run a command line program silently. It does not flash a console window.

а также:

Property: WindowStyle
Notes: Use this to set windows as hidden. The author has used ProcessWindowStyle.Hidden often.

В качестве примера!

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.
    }
}
 Ahmed08 июл. 2009 г., 10:19
Иногда работает, другие нет. Это зависит от команд файла bat?
Решение Вопроса

false, тогда вы запускаете процесс и можете использовать:

proc.StartInfo.CreateNoWindow = true;

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;
}

Хорошее покрытие страницыCreateNoWindow это наблог MSDN.

В Windows также есть ошибка, которая может вызвать диалог и поражение.CreateNoWindow если вы передаете имя пользователя / пароль. Для деталей

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

 Ahmed08 июл. 2009 г., 10:17
Иногда работает, другие нет. Это зависит от команд файла bat?
 08 июл. 2009 г., 11:33
Ахмед, я сделал ответ более полным и двумя различными вариантами, которыми вы можете скрыть окно. Кроме того, в зависимости от приложения, я думаю, что вы все равно можете его запустить и сделать несколько окон, несмотря на все ваши усилия.

Когда вы перенаправляете все входные и выходные данные и устанавливаете скрытое окно, оно должно работать

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

Ваш ответ на вопрос