如何编写不会立即将控制权释放给调用应用程序的 Windows 应用程序

How to write a Windows application that doesn't immediately release control to the calling application

本文关键字:应用程序 释放 调用 控制权 Windows 何编写      更新时间:2023-10-16

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

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

是否有一种方法可以强制我的应用程序留在前台,可以这么说,而不是在它实际退出之前释放控制?我试图强制入口点是"main"函数而不是"WinMain",但这没有帮助。

这不是子进程是否"释放控制"的问题- Windows是一个抢占式多任务操作系统,因此所有进程同时运行。如果父进程等待子进程退出,那是因为程序员告诉它等待子进程退出。

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

您可以选择父进程执行的命令行。试试这个:

start /wait myapp.exe

(在交互式命令shell中就是这样做的)

如果这不起作用,你可能需要向父进程的作者寻求建议。