Как запустить консольное приложение C# со скрытой консолью
есть ли способ, чтобы скрыть окно консоли при выполнении консольного приложения?
в настоящее время я использую приложение Windows Forms для запуска консольного процесса, но я не хочу, чтобы окно консоли отображалось во время выполнения задачи.
12 ответов
Если вы используете ProcessStartInfo
class вы можете установить стиль окна в 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();