콘솔 응용 프로그램을 실행할 때 콘솔 창을 숨기는 방법이 있습니까?
현재 Windows Forms 응용 프로그램을 사용하여 콘솔 프로세스를 시작하고 있지만 작업이 실행되는 동안 콘솔 창이 표시되는 것을 원하지 않습니다.
답변
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 응용 프로그램”(프로젝트 속성에서 완료)으로 변경하십시오.
답변
Process Class를 사용하는 경우 다음을 작성할 수 있습니다.
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();
}
주어진 명령 행 프로그램을 실행하고 완료 될 때까지 기다렸다가 출력을 문자열로 리턴합니다.
답변
사용자 입력이 필요없는 프로그램을 만드는 경우 항상 서비스로 만들 수 있습니다. 서비스에는 어떤 종류의 UI도 표시되지 않습니다.