Как запустить консольное приложение C# со скрытой консолью
есть ли способ, чтобы скрыть окно консоли при выполнении консольного приложения?
в настоящее время я использую приложение Windows Forms для запуска консольного процесса, но я не хочу, чтобы окно консоли отображалось во время выполнения задачи.
12 ответов:
Если вы используете
ProcessStartInfoкласс вы можете установить стиль окна в hidden:System.Diagnostics.ProcessStartInfo start = new System.Diagnostics.ProcessStartInfo(); start.FileName = dir + @"\Myprocesstostart.exe"; start.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
Если вы написали консольное приложение, вы можете сделать его по умолчанию скрыты.
создайте новое консольное приложение, а затем измените тип" тип вывода "на" приложение Windows "(сделано в свойствах проекта)
Если вы используете класс процесса, то вы можете написать
yourprocess.StartInfo.UseShellExecute = false; yourprocess.StartInfo.CreateNoWindow = true;до
yourprocess.start();и процесс будет скрыт
простой ответ таков: перейдите в свойства вашего консольного приложения(свойства проекта).на вкладке "приложение" просто измените "тип вывода" на "приложение Windows". Вот и все.
можно использовать FreeConsole API для отсоединения консоли от процесса:
[DllImport("kernel32.dll")] static extern bool FreeConsole();(конечно, это применимо только в том случае, если у вас есть доступ к исходному коду консольного приложения)
Если вы заинтересованы в выходной, вы можете использовать эту функцию:
private static string ExecCommand(string filename, string arguments) { Process process = new Process(); ProcessStartInfo psi = new ProcessStartInfo(filename); psi.Arguments = arguments; psi.CreateNoWindow = true; psi.RedirectStandardOutput = true; psi.RedirectStandardError = true; psi.UseShellExecute = false; process.StartInfo = psi; StringBuilder output = new StringBuilder(); process.OutputDataReceived += (sender, e) => { output.AppendLine(e.Data); }; process.ErrorDataReceived += (sender, e) => { output.AppendLine(e.Data); }; // run the process process.Start(); // start reading output to events process.BeginOutputReadLine(); process.BeginErrorReadLine(); // wait for process to exit process.WaitForExit(); if (process.ExitCode != 0) throw new Exception("Command " + psi.FileName + " returned exit code " + process.ExitCode); return output.ToString(); }он запускает данную программу командной строки, ждет ее завершения и возвращает вывод в виде строки.
Если вы создаете программу, которая не требует пользовательского ввода, вы всегда можете просто создать ее как сервис. Служба не будет показывать какой-либо пользовательский интерфейс.
Я знаю, что я не отвечаю точно, что вы хотите, но мне интересно, если вы задаете правильный вопрос.
Почему бы тебе не использовать:
- служба windows
- создайте новый поток и запустите свой процесс на этом
Это звучит как лучшие варианты, если все, что вы хотите, чтобы запустить процесс.
хотя, как и другие ответы здесь сказали, Вы можете изменить "тип вывода" на "приложение Windows", имейте в виду, что это будет означать, что вы не можете использовать
Console.Inкак он станет NullStreamReader.
Console.OutиConsole.ErrorКажется, все еще работает нормально, однако.
добавьте это в свой класс, чтобы импортировать DLL-файл:
[DllImport("user32.dll")] static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); const int SW_HIDE = 0; const int SW_SHOW = 5;и затем, если вы хотите, чтобы скрыть его использовать эту команду:
var handle = GetConsoleWindow(); ShowWindow(handle, SW_HIDE);и если вы хотите показать консоль:
var handle = GetConsoleWindow(); ShowWindow(handle, SW_SHOW);
просто писать
ProcessStartInfo psi= new ProcessStartInfo("cmd.exe"); ...... psi.CreateNoWindow = true;
основываясь на ответе Адама Марковица выше, для меня сработало следующее:
process = new Process(); process.StartInfo = new ProcessStartInfo("cmd.exe", "/k \"" + CmdFilePath + "\""); process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //process.StartInfo.UseShellExecute = false; //process.StartInfo.CreateNoWindow = true; process.Start();
Comments