ProcessStartInfo的UseShellExecute和CreateNoWindow有什么区别?

时间:2013-03-31 18:42:38

标签: .net process windows-shell

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

   UseShellExecute=true and CreateNoWindow=false

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

   UseShellExecute=false and CreateNoWindow=false

如果我要使用以下内容,既不会创建新窗口,也不会在启动它的应用程序窗口中显示已启动进程的输出:

   UseShellExecute=false and CreateNoWindow=true

但是当UseShellExecute = true时,似乎“CreateNoWindow”没有效果,那么当UseShellExecute = true时,“CreateNoWindow”会扮演什么角色呢?仅当作为新进程启动的应用程序是Forms应用程序时它是否适用?

1 个答案:

答案 0 :(得分:4)

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

  1. 您使用UseShellExecute = false以便使用CreateProcess()winapi来启动程序
  2. 您启动的程序是控制台模式应用程序。
  3. 如果应用程序是创建自己的窗口的本机Windows GUI应用程序,那么您可以要求它不使用WindowStyle = ProcessWindowStyle.Hidden创建可见窗口。但是有很多程序忽略了这个请求。他们应该只通过任务管理器来阻止它。下一个合理的选择是ProcessWindowStyle.Minimized