[c#] Process.Start C #에서 콘솔 창 숨기기

System.Diagnostics.Process 클래스를 사용하여 원격 컴퓨터에서 프로세스를 만들려고합니다. 프로세스를 만들 수 있습니다. 그러나 문제는 서비스 생성에 시간이 오래 걸리고 콘솔 창이 표시된다는 것입니다. 또 다른 성가신 점은 콘솔 창이 내 창 양식 위에 표시되고 해당 양식에서 다른 작업을 수행 할 수 없다는 것입니다. 다음과 같은 모든 속성을 설정했습니다 CreateNoWindow = true.

proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden

하지만 여전히 콘솔 창을 보여줍니다. 출력과 오류를 별도의 스트림으로 리디렉션했지만 운이 없습니다.

콘솔 창을 숨기는 다른 방법이 있습니까? 제발 도와주세요.

다음은 sc 명령을 실행하는 데 사용한 코드의 일부입니다.

Process proc = new Process();
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.FileName = "sc";
proc.StartInfo.Arguments = string.Format(@"\\SYS25 create MySvc binPath= C:\mysvc.exe");
proc.StartInfo.RedirectStandardError = false;
proc.StartInfo.RedirectStandardOutput = false;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
proc.WaitForExit();



답변

콘솔 창을 표시하지 않고 프로세스를 시작하려고 할 때 비슷한 문제가 발생했습니다. 내가 원하는 동작을 나타내는 것을 찾을 때까지 여러 가지 속성 값 조합으로 테스트했습니다.

다음은 UseShellExecute속성을 false로 설정해야하는 이유를 자세히 설명하는 페이지 입니다.
http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.createnowindow.aspx

페이지의 비고 섹션에서 :

UseShellExecute 속성이 true이거나 UserName 및 Password 속성이 null이 아니면 CreateNoWindow 속성 값이 무시되고 새 창이 생성됩니다.

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = fullPath;
startInfo.Arguments = args;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;

Process processTemp = new Process();
processTemp.StartInfo = startInfo;
processTemp.EnableRaisingEvents = true;
try
{
    processTemp.Start();
}
catch (Exception e)
{
    throw;
}


답변

나는이 대답에 불운을 보였습니다. 프로세스 (Wix light.exe)는 본질적으로 점심 식사에 나가고 저녁 시간에 집에 오지 않았습니다. 그러나 다음은 나를 위해 잘 작동했습니다.

Process p = new Process();
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
// etc, then start process


답변

이것은 작동합니다.


시스템 참조를 추가하십시오.

using System.Diagnostics;

그런 다음이 코드를 사용하여 숨겨진 CMD 창에서 명령을 실행합니다.

Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
cmd.StartInfo.Arguments = "Enter your command here";
cmd.Start();


답변

이것은 창을 표시하지 않습니다.

Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
cmd.StartInfo.CreateNoWindow = true;

...
cmd.Start();


답변