UseShellExecuteブール型プロパティはウィンドウの使用に関連しているのShellExecute VS機能のCreateProcess機能-短い答えは場合ということですUseShellExecute本当ですその後、Processクラスが使用するShellExecute機能を、それ以外の場合は使用されますCreateProcess。
より長い答えは、ShellExecute関数は指定されたプログラムまたはファイルを開くために使用されるということです-実行するコマンドを実行ダイアログに入力して[OK]をクリックするのとほぼ同じです。
- ブラウザーが何であるかを知らなくても、デフォルトのブラウザーを使用して.htmlファイルまたはWebを開きます。
- 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しかし、私は意志の仕事(それを試してみて、参照)の上に与えた3例のいずれもありません。
要約すると、次の場合はUseShellExecutefalseに設定する必要があります。
- 標準入力/出力/エラーをリダイレクトしたい(これが最も一般的な理由です)
- 実行可能ファイルのパスを検索したくない(たとえば、セキュリティ上の理由から)
逆UseShellExecuteに、実行可能ファイルへのパスを明示的に指定するのではなく、ドキュメント、URL、バッチファイルなどを開く場合は、true を維持する必要があります。
processStartInfo.RedirectStandardOutput=true、実行することで標準出力をリダイレクトできるように思えますprocess.Arguments= "cmd /c dir >c:\\crp\\a.a"。同様に、実行ダイアログボックスから実行できますcmd /c dir>c:\crp\a.a