如何编写一个不立即向调用应用程序释放控制权的Windows应用程序

时间:2015-08-29 20:35:16

标签: c++ windows visual-studio

我正在编写一个执行某些任务的小应用程序(.exe),然后返回退出状态。它应该从另一个使用状态代码确定进一步操作的应用程序(我无法控制)定期运行。

如果我将其编译并链接为控制台应用程序,它的工作正常。但是,这会使控制台窗口在每次运行时在屏幕上短暂闪烁,这有点令人讨厌。我试图使它成为一个Windows应用程序,但问题是Windows在启动后立即释放对调用应用程序(或操作系统)的控制权。因此,我的应用程序生成的任何退出状态都会返回太晚,并且调用应用程序永远不会看到它。

有没有办法强制我的应用程序保持在前台,可以这么说,并且在实际退出之前不释放控制权?我试图强制进入点是"主要"功能而不是" WinMain",但这没有帮助。

1 个答案:

答案 0 :(得分:1)

这不是孩子是否“释放控制权”的问题 - Windows是抢先式多任务操作系统,因此所有进程都会立即运行。如果父进程等待子进程退出,那是因为程序员告诉它等待子进程退出。

让程序等待控制台程序而不是非控制台程序并不容易。命令shell(cmd.exe)在交互式运行时以这种方式工作,但据我所知,没有任何API可以执行此操作。假设它不是故意的 - 在这种情况下会非常奇怪 - 我能想到的唯一解释是程序正在运行一个交互式命令shell并通过标准输入提供命令。这是错误的做法,但我已经看到人们试图这样做。

据推测,您可以选择父执行的命令行。试试这个:

start /wait myapp.exe

(这就是你在交互式命令shell中的表现。)

如果这不起作用,您可能需要咨询父流程的作者以获取建议。