从命令提示符运行控制台应用程序,而不启动新的控制台窗口

时间:2014-06-06 18:09:50

标签: c# .net windows windows-console

有没有办法阻止控制台应用程序从命令提示符执行时启动新的控制台窗口?我不知道为什么我以前从未注意到这一点(或者如果我之前没有被它烦过)但我希望能够打开命令提示符,导航到我的控制台应用程序(.exe)的位置是运行它而不启动新的控制台窗口。

我见过关于如何隐藏控制台窗口的线程,但我的应用程序并不是真的以自动方式运行,所以如果他们从资源管理器运行它,我希望他们能看到它。

1 个答案:

答案 0 :(得分:11)

从现有命令行运行时,控制台应用程序不会创建新的控制台窗口:Windows将重新使用现有窗口。

PE可执行文件(即.exe文件)标有一个标志,告诉操作系统是否是控制台应用程序:如果它被标记为控制台应用程序,则Windows将重新使用控制台用于启动它的窗口,或者如果从GUI进程(例如Windows资源管理器)启动它,则创建一个新窗口。在.NET应用程序中,此标志由“项目属性”中的“应用程序类型”下拉列表控制(其中列出了" Windows应用程序","控制台应用程序"或"类文库"。)

如果您的程序正在创建一个新窗口,那么它可能设置了错误的标志或程序代码手动调用AllocConsole,这将创建一个新的控制台窗口,无论该过程是如何创建的或PE控制台标志。

更新还有另一个原因:当控制台应用程序在与其(非提升的)父控制台窗口不同的权限级别下运行时,UAC将要求它位于自己的窗口中。