新しいプロセスを開始するとき、を使用するとどのような違いがありますか
WindowStyle = Hidden
または
CreateNoWindow = true
ProcessStartInfo
クラスのプロパティ?
新しいプロセスを開始するとき、を使用するとどのような違いがありますか
WindowStyle = Hidden
または
CreateNoWindow = true
ProcessStartInfo
クラスのプロパティ?
ハンスが言ったように、WindowStyleはプロセスに渡される推奨事項であり、アプリケーションはそれを無視することを選択できます。
CreateNoWindowは、子プロセスでコンソールがどのように機能するかを制御しますが、単独では機能しません。
CreateNoWindowは、UseShellExecuteと連携して次のように機能します。
ウィンドウなしでプロセスを実行するには:
ProcessStartInfo info = new ProcessStartInfo(fileName, arg);
info.CreateNoWindow = true;
info.UseShellExecute = false;
Process processChild = Process.Start(info);
子プロセスを独自のウィンドウ(新しいコンソール)で実行するには
ProcessStartInfo info = new ProcessStartInfo(fileName, arg);
info.UseShellExecute = true; // which is the default value.
Process processChild = Process.Start(info); // separate window
親のコンソールウィンドウで子プロセスを実行するには
ProcessStartInfo info = new ProcessStartInfo(fileName, arg);
info.UseShellExecute = false; // causes consoles to share window
Process processChild = Process.Start(info);
CreateNoWindow はコンソール モード アプリにのみ適用され、コンソール ウィンドウは作成されません。
WindowStyle は、ネイティブ Windows GUI アプリにのみ適用されます。これは、そのようなプログラムのWinMain() エントリ ポイントに渡されるヒントです。4 番目の引数 nCmdShow は、メイン ウィンドウを表示する方法を指定します。これは、デスクトップ ショートカットの [実行] 設定として表示されるのと同じヒントです。「非表示」はオプションではないことに注意してください。適切に設計されたWindowsプログラムは、その要求を尊重するものはほとんどありません。それはユーザーを詮索するので、彼はもうプログラムをアクティブにすることができず、タスク マネージャーでしか強制終了できません。
WindowStyle
Reflectorを使用すると、が設定されている場合はが使用されているように見えUseShellExecute
、そうでない場合はを使用しますCreateNoWindow
。
MSDNの例では、MSDNがどのように設定したかを確認できます。
// Using CreateNoWindow requires UseShellExecute to be false
myProcess.StartInfo.UseShellExecute = false;
// You can start any process, HelloWorld is a do-nothing example.
myProcess.StartInfo.FileName = "C:\\HelloWorld.exe";
myProcess.StartInfo.CreateNoWindow = true;
myProcess.Start();
UseShellExecute
他の例では、デフォルトでtrueになっているため、そのすぐ下にあります。
// UseShellExecute defaults to true, so use the WindowStyle
ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe");
startInfo.WindowStyle = ProcessWindowStyle.Minimized;