Есть ли способ скрыть окно консоли при выполнении консольного приложения?
В настоящее время я использую приложение Windows Forms для запуска консольного процесса, но я не хочу, чтобы окно консоли отображалось во время выполнения задачи.
c#
console-application
Аарон Томас
источник
источник
Ответы:
Если вы используете
ProcessStartInfo
класс, вы можете установить стиль окна как скрытый - в случае консольных (не GUI) приложений вы должны установить CreateNoWindow наtrue
:System.Diagnostics.ProcessStartInfo start = new System.Diagnostics.ProcessStartInfo(); start.FileName = dir + @"\Myprocesstostart.exe"; start.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //Hides GUI start.CreateNoWindow = true; //Hides console
источник
Если вы написали консольное приложение, вы можете сделать его скрытым по умолчанию.
Создайте новое консольное приложение, затем измените тип «Тип вывода» на «Приложение Windows» (выполняется в свойствах проекта).
источник
Если вы используете класс процесса, вы можете написать
yourprocess.StartInfo.UseShellExecute = false; yourprocess.StartInfo.CreateNoWindow = true;
до
yourprocess.start();
и процесс будет скрытисточник
Простой ответ: перейдите в свойства консольного приложения (свойства проекта). На вкладке «Приложение» просто измените «Тип вывода» на «Приложение Windows». Вот и все.
источник
Вы можете использовать FreeConsole API, чтобы отсоединить консоль от процесса:
[DllImport("kernel32.dll")] static extern bool FreeConsole();
(конечно, это применимо, только если у вас есть доступ к исходному коду консольного приложения)
источник
FreeConsole
делает то, что говорит его название, это не мешает Windows отображать консоль до ее вызова.[DllImport("kernel32.dll")] static extern bool AllocConsole();
позволяет легко запускать с консоли из стандартного приложения Win32Если вас интересует вывод, вы можете использовать эту функцию:
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(); }
Он запускает указанную программу командной строки, ожидает ее завершения и возвращает вывод в виде строки.
источник
Если вы создаете программу, которая не требует ввода данных пользователем, вы всегда можете просто создать ее как службу. Служба не будет отображать какой-либо пользовательский интерфейс.
источник
Добавьте это в свой класс, чтобы импортировать файл DLL:
[DllImport("user32.dll")] static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); [DllImport("kernel32.dll")] static extern IntPtr GetConsoleWindow(); const int SW_HIDE = 0; const int SW_SHOW = 5;
А затем, если вы хотите скрыть это, используйте эту команду:
var handle = GetConsoleWindow(); ShowWindow(handle, SW_HIDE);
А если хотите показать консоль:
var handle = GetConsoleWindow(); ShowWindow(handle, SW_SHOW);
источник
Я знаю, что отвечаю не совсем то, что вы хотите, но мне интересно, правильный ли вы вопрос задаете.
Почему бы вам не использовать:
Похоже, это лучшие варианты, если все, что вам нужно, - это запустить процесс.
источник
Хотя, как сказано в других ответах, вы можете изменить «Тип вывода» на «Приложение Windows», имейте в виду, что это будет означать, что вы не можете использовать,
Console.In
поскольку он станет NullStreamReader.Console.Out
и,Console.Error
похоже, все еще работает нормально.источник
Console.In
когда нет консоли, чтобы что-то вводить? Откуда взять что-нибудь, к чему можно получить доступConsole.In
? В этом нет никакого смысла. Другими словами: Это совершенно очевидно и логично , чтоConsole.In
являетсяNullStreamReader
в данном случае.Основываясь на ответе Адама Марковица выше, у меня сработало следующее:
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();
источник
У меня есть общее решение:
using System; using System.Runtime.InteropServices; namespace WhateverNamepaceYouAreUsing { class Magician { [DllImport("kernel32.dll")] static extern IntPtr GetConsoleWindow(); [DllImport("user32.dll")] static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); const int HIDE = 0; const int SHOW = 5; public static void DisappearConsole() { ShowWindow(GetConsoleWindow(), HIDE); } } }
Просто включите этот класс в свой проект и позвоните
Magician.DisappearConsole();
.Консоль будет мигать, когда вы запустите программу, нажав на нее. При выполнении из командной строки она исчезает вскоре после выполнения.
Я делаю это для бота Discord, который вечно работает в фоновом режиме моего компьютера как невидимый процесс. Это было проще, чем заставить работать TopShelf. Пара руководств по TopShelf не удалась, прежде чем я написал это с некоторой помощью кода, который я нашел в другом месте. ;П
Я также попытался просто изменить настройки в Visual Studio> Project> Properties> Application для запуска в качестве приложения Windows вместо консольного приложения, и что-то в моем проекте помешало этому скрыть мою консоль - возможно, потому что DSharpPlus требует запуска консоли при запуске. . Я не знаю. Какой бы ни была причина, этот класс позволяет мне легко отключить консоль после ее появления.
Надеюсь, этот Волшебник кому-то поможет. ;)
источник
Просто пиши
ProcessStartInfo psi= new ProcessStartInfo("cmd.exe"); ...... psi.CreateNoWindow = true;
источник