首页 文章

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

提问于
浏览
13

当从Cmd运行应用程序时直接调用exe,我对Console vs Windows Application有好奇心的问题 .
如果应用程序编译为控制台应用程序(将其称为我的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似乎只是打开一个新的控制台窗口 .

2 回答

  • 3

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

    • 1:原生

    • 2:Windows / GUI

    • 3:Windows非GUI

    • 5:OS / 2

    • 7:POSIX

    这就是告诉Windows它是什么类型的程序,因此它能够像cmd那样做出不同的选择 .

    Documentation Link

  • 7

    除了技术细节(JaredPar did a really good job of doing that),如果您想将程序从 Windows/GUI 模式更改为 Windows non-GUI ,您需要做的就是进入项目设置并将下拉菜单从"Windows Application"更改为"Console Application"

    enter image description here

    您可以将Window应用程序作为控制台应用程序运行,它将为您提供您期望的行为 . (但请注意,现在,如果双击程序的图标,它将打开一个控制台窗口,在程序打开时将保持打开状态 . )

    enter image description here

相关问题