UseShellExecute부울 속성이 창문의 사용과 관련된 에서 ShellExecute 은 VS 기능 의 CreateProcess 기능 - 짧은 대답은 경우이다 UseShellExecute사실 그 Process클래스가 사용됩니다 ShellExecute그렇지 않으면 사용, 기능 CreateProcess.
더 긴 대답은 ShellExecute함수가 지정된 프로그램이나 파일을 여는 데 사용된다는 것입니다. 실행 대화 상자에서 실행할 명령을 입력하고 확인을 클릭하는 것과 거의 동일합니다.
- 브라우저가 무엇인지 몰라도 기본 브라우저를 사용하여 .html 파일 또는 웹을 엽니 다.
- Word의 설치 경로가 무엇인지 알 필요없이 Word 문서를 엽니 다.
- 에서 모든 명령을 실행하십시오.
PATH
예를 들면 다음과 같습니다.
Process p = new Process();
p.StartInfo.UseShellExecute = true;
p.StartInfo.FileName = "www.google.co.uk";
p.Start();
사용하기가 쉽고, 다목적이며 강력하지만 몇 가지 단점이 있습니다.
표준 입력 / 출력 / 오류 핸들을 리디렉션 할 수 없습니다
자식 프로세스에 보안 설명자 (또는 다른 멋진 것들)를 지정할 수 없습니다
실제로 실행될 항목에 대해 가정하면 보안 취약점이 발생할 가능성이 있습니다.
// If there is an executable called "notepad.exe" somewhere on the path
// then this might not do what we expect
p.StartInfo.FileName = "notepad.exe";
p.Start();
CreateProcess프로세스를 시작하는 훨씬 더 정확한 방법입니다. 경로를 검색하지 않고 하위 프로세스의 표준 입력 또는 출력을 다른 방향으로 리디렉션 할 수 있습니다. 그러나 단점 CreateProcess은 위에서 설명한 세 가지 예 중 어느 것도 효과가 없다는 것입니다 (시도해보십시오).
요약 UseShellExecute하면 다음과 같은 경우 false로 설정해야 합니다.
- 표준 입력 / 출력 / 오류를 리디렉션하려고합니다 (가장 일반적인 이유입니다)
- 실행 파일의 경로를 검색하지 않으려는 경우 (예 : 보안상의 이유로)
반대로 UseShellExecute문서, URL 또는 배치 파일 등을 열려면 실행 파일의 경로를 명시 적으로 지정하지 않고 사실 을 유지해야 합니다.
processStartInfo.RedirectStandardOutput=true하여 표준 출력을 계속 리디렉션 할 수있는 것 같습니다process.Arguments= "cmd /c dir >c:\\crp\\a.a". 실행 대화 상자에서와 마찬가지로cmd /c dir>c:\crp\a.a