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

标签 c# .net windows windows-console

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

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

最佳答案

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

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

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

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

关于c# - 从命令提示符运行控制台应用程序而不启动新的控制台窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24088172/

相关文章:

windows - mod_rewrite 不适用于 Windows 7 上的 Apache 2.2

windows - Window 2008 Tomcat 7 MS SQL Server 2008R2 - 无法识别 JNDI JDBC 驱动程序

c# - C# 中的任务并行 (TPL) 和任务调度

c# - EFCore.BulkExtensions 中的 BulkInsertAsync 似乎没有插入任何内容

python - 在 Windows 中更改 Python 解释器时遇到问题

c# - 是否可以从另一个线程观察部分构造的对象?

.net - 自定义配置部分中是否可以包含任意 XML?

c# - 我如何在 visual studio 2012 中更正 wpf datagrid 列名称冗余

c# - 显示在引用程序集中运行的任务的进度

.net - 是字符串值类型还是引用类型