69

新しいプロセスを開始するとき、を使用するとどのような違いがありますか

WindowStyle = Hidden

または

CreateNoWindow = true

ProcessStartInfoクラスのプロパティ?

4

3 に答える 3

86

ハンスが言ったように、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); 
于 2011-02-23T17:04:35.450 に答える
22

CreateNoWindow はコンソール モード アプリにのみ適用され、コンソール ウィンドウは作成されません。

WindowStyle は、ネイティブ Windows GUI アプリにのみ適用されます。これは、そのようなプログラムのWinMain() エントリ ポイントに渡されるヒントです。4 番目の引数 nCmdShow は、メイン ウィンドウを表示する方法を指定します。これは、デスクトップ ショートカットの [実行] 設定として表示されるのと同じヒントです。「非表示」はオプションではないことに注意してください。適切に設計されたWindowsプログラムは、その要求を尊重するものはほとんどありません。それはユーザーを詮索するので、彼はもうプログラムをアクティブにすることができず、タスク マネージャーでしか強制終了できません。

于 2011-02-23T16:54:09.243 に答える
16

WindowStyleReflectorを使用すると、が設定されている場合はが使用されているように見え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;
于 2011-02-23T16:57:18.213 に答える