【问题标题】:Holding cmd.exe open on Vista在 Vista 上保持 cmd.exe 打开
【发布时间】:2009-06-07 22:09:38
【问题描述】:

我正在编写 C++ 控制台程序。编译后,当我从文件浏览器运行程序时,cmd.exe 会自动关闭,以至于我看不到我的程序输出。

我发现解决这个问题的唯一方法是从 cmd.exe 内部运行程序

有没有办法让 cmd.exe 在程序运行完成后保持打开状态?

我可以在某处更改设置吗?我不想用 cmd.exe /K 运行批处理脚本

谢谢!

[编辑] 不知道这是否重要,但我使用的是 Vista x64

【问题讨论】:

  • 也许给 Console2 一个机会:(sourceforge.net/projects/console)虽然我不确定它是否在 64 位 Vista 上运行。
  • 它运行良好,但在这种情况下是一样的。

标签: c++ cmd vista64


【解决方案1】:

您可以在启动 cmd.exe 时使用 /K 开关设置快捷方式,使其在运行给定命令后不会终止:

 cmd.exe /K YourProgram.exe

【讨论】:

  • cmd.exe /c YourProgram.exe & Pause 将完成等待工作并随后关闭
【解决方案2】:

让您的应用程序在退出前要求按键 - 这是最简单的解决方法!

【讨论】:

  • 我已经想到了,但我想知道是否可以更改以保持 cmd.exe 全局打开。我可以对 cmd.exe 做些什么吗?
  • 自 Windows 98 以来没有,没有。您可以在其周围放置一个批处理文件,它基本上只是运行您的程序并在此之后“暂停”。或者您可以使用命令行 cmd /c "%1 & pause" 在程序的上下文菜单中添加一个新条目。
  • 请注意,如果您直接从文件管理器运行程序,则 cmd.exe 根本不会参与其中。没有办法阻止 cmd.exe 自动关闭,因为它从来没有被打开过!
  • Spire 说得对——cmd.exe 只是一个使用 CONSOLE 子系统运行的程序。您可以选择您编译的程序将使用哪个子系统,以及 LINK.EXE 的 /SUBSYSTEM 标志:msdn.microsoft.com/en-us/library/fcc1zstk(vs.71).aspx
  • 无论如何你都不想让 CMD.EXE 保持全局打开。这势必会影响其他希望它关闭的程序。
【解决方案3】:

我一直喜欢创建一个批处理文件,调用你的程序,然后调用暂停

Prog.exe 暂停

这将给出一个很好的“按任意键继续...”提示,它很简单,不需要修改程序。

【讨论】:

  • 我喜欢添加一个自动热键脚本来获得启动批处理文件的快捷方式。更容易。
【解决方案4】:

作为main() 函数的最后一行,您可以添加这一行:

system("PAUSE");

另外,请确保#include <stdlib.h> 声明system() 函数。这将使控制台暂停。但是,如果您的程序是从 cmd.exe 内部运行的,这仍然会暂停,这可能是不可取的。

【讨论】:

  • system() 调用很糟糕。在 Google 中输入不适合此评论的一长串原因。
【解决方案5】:

我知道你问过如何通过文件浏览器来做,但如果其他人对同样的问题感兴趣,但通过 Visual Studio:

最好在程序结束前设置断点。

然后您可以部署您的 exe,并且您可以确保不会忘记删除要求输入。这也比请求输入更好,因为注释掉并返回请求输入需要花费大量时间。

我认为最好不要要求输入,而是从启动的命令提示符启动程序。

【讨论】:

  • 断点?像_asm int 3?这是一个有男子气概的按键!
  • 不...就像 VS IDE 中的一个红点。一种不会将代码注入已编译的 .exe。
  • 但问题是从文件浏览器运行程序时控制台消失得太快了。也就是说,从 Windows 资源管理器。由 Explorer 启动的程序不受断点的影响,因为它们没有被调试。
  • @Rob Kennedy:我明白了,我修改了我的答案以表明这仅适用于从 Visual Studio 运行它时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多