Скрыть окно консоли с Process.Start С#

Я пытаюсь создать процесс на удаленной машине, используя класс System.Diagnostics.Process. Я могу создать процесс. Но проблема в том, что создание службы занимает много времени, и отображается консольное окно. Еще одна неприятная вещь: консольное окно отображается поверх моей формы окна, и я не могу выполнять любые другие операции над этой формой. Я установил все свойства, такие как 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();

Ответ 1

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

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

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

Если свойство UseShellExecute является истинным или UserName и Свойства пароля не равны 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;
}

Ответ 2

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

Process p = new Process();
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
// etc, then start process

Ответ 3

Это должно работать, потому что это сработало для меня. Поэтому попробуйте

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

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();