如何编写不会立即将控制权释放给调用应用程序的 Windows 应用程序
How to write a Windows application that doesn't immediately release control to the calling application
我正在编写一个小应用程序(.exe),它执行一些任务,然后返回退出状态。它意味着从另一个应用程序(我无法控制)定期运行,该应用程序使用状态码来确定进一步的操作。
如果我将其编译并链接为控制台应用程序,它就可以正常工作。然而,这使得每次运行时控制台窗口都会在屏幕上短暂闪烁,这有点烦人。我试图让它成为一个Windows应用程序,但问题是Windows在启动后立即将控制权释放给调用应用程序(或操作系统)。因此,我的应用程序生成的任何退出状态都返回得太晚,并且永远不会被调用的应用程序看到。
是否有一种方法可以强制我的应用程序留在前台,可以这么说,而不是在它实际退出之前释放控制?我试图强制入口点是"main"函数而不是"WinMain",但这没有帮助。
这不是子进程是否"释放控制"的问题- Windows是一个抢占式多任务操作系统,因此所有进程同时运行。如果父进程等待子进程退出,那是因为程序员告诉它等待子进程退出。
让一个程序等待控制台程序而不是非控制台程序是不容易的。命令shell (cmd.exe
)在交互运行时以这种方式工作,但据我所知,没有任何API可以做到这一点。假设这不是故意的——在这种情况下,这将是非常奇怪的——我能想到的唯一解释是,程序正在运行一个交互式命令shell,并通过标准输入输入命令。这是错误的做法,但我曾看到有人试图这样做。
您可以选择父进程执行的命令行。试试这个:
start /wait myapp.exe
(在交互式命令shell中就是这样做的)
如果这不起作用,你可能需要向父进程的作者寻求建议。
相关文章:
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- 在C++应用程序中使用 Tensorflow:如何释放 GPU 内存
- 如何在我的 Windows 应用程序中捕获按下和释放的 CTRL 键?
- 当我释放由CFFI生成的DLL分配的char*时,为什么我的应用程序会崩溃
- C++应用程序:如何正确删除/释放已分配的对象
- 释放嵌入式应用程序中的内存无助于减少虚拟存储
- 如何编写不会立即将控制权释放给调用应用程序的 Windows 应用程序