如果控制台应用程序是从命令提示符执行的,是否有办法阻止它启动新的控制台窗口?我不知道为什么我以前从未注意到这一点(或者如果我以前没有被它惹恼过)但我希望能够打开命令提示符,导航到我的控制台应用程序(.exe)是并在不启动新控制台窗口的情况下运行它。
我看到过关于如何隐藏控制台窗口的帖子,但我的应用程序并不是真的要以自动方式运行,所以如果他们从资源管理器运行它,我希望他们能看到它。
最佳答案
控制台应用程序在从现有命令行运行时不会创建新的控制台窗口:Windows 将重新使用现有窗口。
PE 可执行文件(即 .exe
文件)标有一个标志,告诉操作系统它是否是控制台应用程序:如果它被标记为控制台应用程序,那么 Windows 将重新使用用于启动它的控制台窗口,或者如果它是从 GUI 进程(例如 Windows 资源管理器)启动的,则创建一个新窗口。在 .NET 应用程序中,此标志由项目属性中的应用程序类型下拉列表控制(其中列出“Windows 应用程序”、“控制台应用程序”或“类库”)。
如果您的程序正在创建一个新窗口,那么它可能设置了错误的标志,或者程序代码正在手动调用 AllocConsole
这将创建一个新的控制台窗口,而不管进程是如何创建的,或者PE 控制台标志。
更新 还有一个原因:当控制台应用程序在与其(未提升的)父控制台窗口不同的特权级别下运行时,UAC 将要求它在自己的窗口中。
关于c# - 从命令提示符运行控制台应用程序而不启动新的控制台窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24088172/