c# - 通过 Cmd 启动 Windows 应用程序与控制台应用程序

标签 c# cmd console-application windows-applications

当从 Cmd 运行应用程序时,我有一个关于控制台与 Windows 应用程序的好奇问题,直接调用 exe。
如果应用程序被编译为控制台应用程序(将其称为我的 ConApp),当通过 cmd 运行应用程序时,提示会等待应用程序完成运行,然后再继续。但是,如果该应用程序已被编译为 Windows 应用程序(将其称为我的 WinApp),则通过 cmd 启动该应用程序提示符将启动并忘记 WinApp,这是可以理解的预期行为。
要让 WinApp 停止 cmd 的触发和遗忘,必须在 cmd 中使用类似“start\wait WinApp.exe”的内容启动应用程序,这将导致 Cmd 提示在继续之前等待 WinApp 停止运行。
我的问题是控制台应用程序如何通知 Cmd,或者 Cmd 如何知道它需要保持打开状态,而不是即发即忘 ConApp?是否可以在我的 WinApp 中调用相同的行为,这样我就不必调用“start\wait”?

注意:
我尝试过使用 AllocConsole 和 AttachConsole,但是当在我的 WinApp 中使用 AttachConsole(-1) 时,Cmd 仍然会触发并忘记 WinApp 但是 WinApp 似乎只是打开了一个新的控制台窗口。

最佳答案

此信息存储为 EXE 二进制格式的 PEOptHeader 部分的一部分。具体来说,Subsystem 字段告诉操作系统这是什么类型的应用程序,并且可以具有以下值

  • 1:原生
  • 2:Windows/图形用户界面
  • 3:Windows 非 GUI
  • 5:OS/2
  • 7: POSIX

这就是告诉 windows 它是什么类型的程序,从而使它能够像 cmd 一样做出不同的选择。

Documentation Link

关于c# - 通过 Cmd 启动 Windows 应用程序与控制台应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20961904/

相关文章:

JavaScript 控制台程序

c# - 使用linq to xml遍历xml树中的每个元素

c# - 如何向 IdentityServer LogoutRequest 模型添加参数?

JAVA新手警报: Trying to run Java class and getting ClassNotFoundException

windows - 如何在 GUI 应用程序中写入控制台

c# - 将 MenuItem 添加到控制台应用程序中 TrayIcon 的上下文菜单

c# - 根据另一列中的值对数据表中的列求和

c# - 如何编辑 asp.net 图表 X 轴标签并只显示日期而不显示时间

batch-file - 当文件已经存在时,如何在批处理文件的开头退出批处理?

Python 未被识别为 Windows 7 中的内部或外部命令