2

我遇到了麻烦,归结为希望CreateProcessStartProcess。问题是在某些情况下,它创建CreateProcess进程时返回true,但系统无法启动进程。例如,即使启动者的其中一个导入无法解析,也会成功。CreateProcess

根据我希望通过启动此过程完成的具体目标,可能有十几个建议。但是,我担心这些建议都不可能有用,因为我不希望通过启动这个过程来完成任何特别的事情。

一个示例建议可能是调用WaitForSingleObject进程句柄,然后调用GetExitCodeProcess. 但我等不及进程退出,因为它可能会永远存在。

另一个示例建议可能是 call WaitForInputIdle,如果我希望通过我可以合理地期望启动者创建的窗口与启动者进行通信,这将很有效。但我不希望这样,我也不能合理地期待这一点。据我所知,启动者是一个控制台进程和/或永远不会有消息队列。同样,我不能等待(带着启发式意图)找出答案。

事实上,我不能假设关于发射者的任何事情。

为了更好地了解我在这里的想法,让我们看看问题的另一面。如果该过程没有启动,我需要一个错误代码来告诉我如何建议用户。如果导入全部解决并且主线程意识到它即将跳转到 CRT 启动代码(或等效代码),并且我得到的错误代码是ERROR_SUCCESS,太好了!但我实际上对启动器不感兴趣,只是希望在启动器中提供良好的用户体验。

哦,还有一件事:我希望这很简单。我不想写调试器。:-)

想法?

4

2 回答 2

1

一个示例建议可能是针对进程句柄调用 WaitForSingleObject,然后调用 GetExitCodeProcess。但我等不及进程退出,因为它可能会永远存在。

为什么不等待进程句柄一段合理的时间。如果计时器在句柄发出信号之前到期,则可以假定该进程已启动并正在运行。如果句柄首先发出信号,并且退出代码是正确的,那么您可以假定它运行并成功完成。

如果您还没有看到,Raymond Chen 的博客中提到了 CreateProcess vs started 问题。

老实说,如果您不愿意接受启发式方法(例如,“三秒后它还没有以失败代码结束,因此我们假设一切都很好”),那么您将不得不编写一个“调试器”,我的意思是检查已启动进程的内部结构。

于 2011-02-15T06:46:45.703 回答
0

This question has gone so long without an answer that I suspect it's safe to conclude that the answer is: "You can't."

于 2011-08-06T22:24:53.863 回答