Я пытаюсь создать процесс на удаленной машине, используя класс 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();