Скрыть консольное окно из Process.Start C # - PullRequest
86 голосов
/ 21 марта 2011

Я пытаюсь создать процесс на удаленной машине, используя класс System.Diagnostics.Process. Я могу создать процесс. Но проблема в том, что создание службы занимает много времени, и отображается окно консоли. Еще одна досадная вещь - окно консоли отображается поверх формы Windows, и я не могу выполнять какие-либо другие операции с этой формой. Я установил все свойства, как CreateNoWindow = true,

proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden

но все равно он показывает окно консоли. даже я перенаправил вывод и ошибки в отдельный поток, но не повезло.

Есть ли другой способ скрыть окно консоли? Пожалуйста, помогите мне.

Вот часть моего кода, которую я использовал для выполнения команды sc.

Process proc = new Process();
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.FileName = "sc";
proc.StartInfo.Arguments = string.Format(@"\\SYS25 create MySvc binPath= C:\mysvc.exe");
proc.StartInfo.RedirectStandardError = false;
proc.StartInfo.RedirectStandardOutput = false;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
proc.WaitForExit();

Ответы [ 4 ]

107 голосов
/ 08 февраля 2013

У меня была похожая проблема при попытке запустить процесс без отображения окна консоли.Я тестировал несколько различных комбинаций значений свойств, пока не нашел одно, демонстрирующее желаемое поведение.

На этой странице показано, почему для свойства UseShellExecute должно быть установлено значение false.
http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.createnowindow.aspx

В разделе «Примечания» на странице:

Если свойство UseShellExecute имеет значение true или свойства UserName и Password не равны NULL, значение свойства CreateNoWindow игнорируется и создается новое окно.

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = fullPath;
startInfo.Arguments = args;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;

Process processTemp = new Process();
processTemp.StartInfo = startInfo;
processTemp.EnableRaisingEvents = true;
try
{
    processTemp.Start();
}
catch (Exception e)
{
    throw;
}
48 голосов
/ 10 июля 2013

Мне не повезло с этим ответом, поскольку процесс (Wix light.exe) по сути выходил на обед и не приходил домой вовремя к обеду. Тем не менее, мне помогло следующее:

Process p = new Process();
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
// etc, then start process
15 голосов
/ 10 октября 2014

Это должно сработать, попробуйте;


Добавить системную ссылку.

using System.Diagnostics;

Затем используйте этот код для запуска вашей команды в скрытом окне CMD.

Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
cmd.StartInfo.Arguments = "Enter your command here";
cmd.Start();
3 голосов
/ 21 июня 2018

Это окно не отображается:

Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
cmd.StartInfo.CreateNoWindow = true;

...
cmd.Start();
...