Como executar um aplicativo de console C # com o console oculto

Existe uma maneira de ocultar a janela do console ao executar um aplicativo de console?

No momento, estou usando um aplicativo do Windows Forms para iniciar um processo de console, mas não quero que a janela do console seja exibida enquanto a tarefa está em execução.

Se você estiver usando a class ProcessStartInfo poderá definir o estilo da janela como oculto:

 System.Diagnostics.ProcessStartInfo start = new System.Diagnostics.ProcessStartInfo(); start.FileName = dir + @"\Myprocesstostart.exe"; start.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 

Se você escreveu o aplicativo de console, pode torná-lo oculto por padrão.

Crie um novo aplicativo de console e, em seguida, altere o tipo “Tipo de saída” para “Aplicativo do Windows” (feito nas propriedades do projeto)

Se você estiver usando a class de processo, então você pode escrever

 yourprocess.StartInfo.UseShellExecute = false; yourprocess.StartInfo.CreateNoWindow = true; 

before yourprocess.start(); e processo será escondido

Resposta simples é que: Vá para as propriedades do seu aplicativo de console (propriedades do projeto). Na guia “Aplicativo”, basta alterar o “Tipo de saída” para “Windows Application”. Isso é tudo.

Você pode usar a API FreeConsole para desappend o console do processo:

 [DllImport("kernel32.dll")] static extern bool FreeConsole(); 

(claro que isso é aplicável apenas se você tiver access ao código-fonte do aplicativo de console)

Se você estiver interessado na saída, você pode usar esta function:

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

Ele executa o programa de linha de comando fornecido, aguarda a conclusão e retorna a saída como uma string.

Se você está criando um programa que não requer input do usuário, você pode apenas criá-lo como um serviço. Um serviço não mostrará nenhum tipo de interface do usuário.

Eu sei que não estou respondendo exatamente o que você quer, mas estou me perguntando se você está fazendo a pergunta certa.

Por que você não usa:

  1. serviço do windows
  2. criar um novo segmento e executar o seu processo nesse

Aqueles soam como melhores opções se tudo que você quer é executar um processo.

Embora, como outras respostas aqui mencionadas, você possa alterar o “Tipo de saída” para “Aplicativo do Windows”, esteja ciente de que isso significa que você não pode usar o Console.In pois ele se tornará um NullStreamReader.

Console.Out e Console.Error parecem ainda funcionar bem no entanto.

Adicione isto à sua class para importar o arquivo DLL:

 [DllImport("user32.dll")] static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); const int SW_HIDE = 0; const int SW_SHOW = 5; 

E então, se você quiser escondê-lo, use este comando:

 var handle = GetConsoleWindow(); ShowWindow(handle, SW_HIDE); 

E se você quiser mostrar o console:

 var handle = GetConsoleWindow(); ShowWindow(handle, SW_SHOW); 

Apenas escreva

 ProcessStartInfo psi= new ProcessStartInfo("cmd.exe"); ...... psi.CreateNoWindow = true; 

Baseado na resposta de Adam Markowitz acima, seguir trabalhou para mim:

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