4

如果我要编写一个控制台应用程序来启动另一个控制台应用程序作为新进程,并使用默认的“UseShellExecute”和“CreateNoWindow”值,结果是控制台应用程序窗口旁边会出现一个新的命令行窗口:

   UseShellExecute=true and CreateNoWindow=false

现在,如果我要使用以下内容,将不会创建新窗口,但已启动进程的输出将出现在启动它的应用程序的窗口上:

   UseShellExecute=false and CreateNoWindow=false

如果我要使用以下内容,则不会创建新窗口,启动进程的输出也不会出现在启动它的应用程序的窗口上:

   UseShellExecute=false and CreateNoWindow=true

但是好像UseShellExecute=true时“CreateNoWindow”没有任何作用,那么UseShellExecute=true时“CreateNoWindow”起什么作用呢?仅当作为新进程启动的应用程序是 Forms 应用程序时才适用?

4

1 回答 1

4

它没有任何作用。规则是 CreateNoWindow 仅在以下情况下才会生效:

  1. 您使用 UseShellExecute = false 以便使用 CreateProcess() winapi 启动程序
  2. 您启动的程序是控制台模式应用程序。

如果应用程序是创建自己的窗口的本机 Windows GUI 应用程序,那么您可以要求它不使用 WindowStyle = ProcessWindowStyle.Hidden 创建可见窗口。然而,有很多程序忽略了这个请求。他们应该,阻止它的唯一方法是通过任务管理器。下一个合理的选择是 ProcessWindowStyle.Minimized

于 2013-03-31T21:04:27.670 回答