Скрыть окно консоли с Process.Start C #
Я пытаюсь создать процесс на удаленной машине, используя class System.Diagnostics.Process. Я могу создать процесс. Но проблема в том, что создание службы занимает много времени, и отображается консольное окно. Еще одна неприятная вещь: консольное окно отображается поверх моей формы windows, и я не могу выполнять любые другие операции над этой формой. Я установил все свойства, такие как CreateNoWindow = true
,
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
но все же он показывает окно консоли. даже я перенаправил вывод и ошибки для разделения streamа, но не повезло.
Есть ли другой способ скрыть окно консоли? Пожалуйста, помогите мне.
- Является std :: vector или boost :: vector thread safe?
- Как действуют правила продвижения, когда отличия по обе стороны от бинарного оператора различаются?
- Не удалось загрузить DLL 'SQLite.Interop.dll'
- Существует ли reference_wrapper для ссылок rvalue?
- Какова реальная причина не использовать бит EOF в качестве условия извлечения streamа?
Вот часть моего кода, который я использовал для выполнения команды 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();
- Создание интерфейса FORTRAN для функции C, которая возвращает символ char *
- Есть ли getchas с использованием varargs со ссылочными параметрами
- Ожидание нескольких задач с разными результатами
- Изменение размера изображения пропорционально ограничениям MaxHeight и MaxWidth
- Приложение не работает с DLL VS 2008 SP1, предыдущая версия работает с версиями RTM
- Самый простой способ разобрать строку с разделителями-запятыми на какой-то объект, который я могу пропустить, чтобы получить доступ к отдельным значениям?
- Autonumber с Entity Framework
- Как вызвать функцию по имени (std :: string) в C ++?
У меня была аналогичная проблема при попытке запустить процесс без отображения windows консоли. Я тестировал несколько различных значений свойств, пока не нашел тот, который показал поведение, которое я хотел.
Вот страница, в которой объясняется, почему для свойства UseShellExecute
должно быть установлено значение false.
http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.createnowindow.aspx
В разделе «Примечания» на странице:
Если свойство UseShellExecute истинно или свойства 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; }
Мне не повезло с этим ответом, с процессом (Wix light.exe), по существу выходящим на обед и не возвращающимся домой к обеду. Однако для меня работали хорошо:
Process p = new Process(); p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; // etc, then start process
Это должно работать, стараться;
Добавьте ссылку на систему.
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();
Это не показывает окно:
Process cmd = new Process(); cmd.StartInfo.FileName = "cmd.exe"; cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; cmd.StartInfo.CreateNoWindow = true; ... cmd.Start();