【问题标题】:How to write a Windows application that doesn't immediately release control to the calling application如何编写不会立即将控制权释放给调用应用程序的 Windows 应用程序
【发布时间】:2015-08-30 05:48:52
【问题描述】:

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

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

有没有办法强制我的应用程序停留在前台,也就是说,在它实际退出之前不释放控制权?我试图将入口点强制为“main”函数而不是“WinMain”,但这没有帮助。

【问题讨论】:

  • 我很确定有必要在调用应用程序中设置选项以防止子进程在没有控制台的情况下启动。您不能从被调用的进程端执行此操作。如果我错了,我会很高兴知道。

标签: c++ windows visual-studio


【解决方案1】:

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

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

大概你可以选择父级执行的命令行。试试这个:

start /wait myapp.exe

(这就是您在交互式命令外壳中的操作方式。)

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

【讨论】:

    猜你喜欢
    • 2012-08-06
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 2012-11-23
    • 1970-01-01
    • 2011-01-07
    相关资源
    最近更新 更多