Как запустить консольное приложение C# со скрытой консолью



есть ли способ, чтобы скрыть окно консоли при выполнении консольного приложения?



в настоящее время я использую приложение Windows Forms для запуска консольного процесса, но я не хочу, чтобы окно консоли отображалось во время выполнения задачи.

879   12  

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();
}

он запускает данную программу командной строки, ждет ее завершения и возвращает вывод в виде строки.

Если вы создаете программу, которая не требует пользовательского ввода, вы всегда можете просто создать ее как сервис. Служба не будет показывать какой-либо пользовательский интерфейс.

Я знаю, что я не отвечаю точно, что вы хотите, но мне интересно, если вы задаете правильный вопрос.

Почему бы тебе не использовать:

  1. служба windows
  2. создайте новый поток и запустите свой процесс на этом

Это звучит как лучшие варианты, если все, что вы хотите, чтобы запустить процесс.

хотя, как и другие ответы здесь сказали, Вы можете изменить "тип вывода" на "приложение 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

    Ничего не найдено.