我遇到麻煩了,歸結爲CreateProcess
是StartProcess
。麻煩的是,有CreateProcess
返回true的情況,它在創建的過程中,但系統不能開始的過程。例如,即使其中一個導入者的導入無法解析,CreateProcess
也會成功。如何知道CreateProcess何時實際啓動了一個進程?
根據我希望通過啓動這個過程完成的工作,我們可能會提出十幾個建議。但是,我擔心這些建議都不會有用,因爲我不希望通過啓動這個流程來完成任何事情。
一個示例建議可能是針對進程句柄調用WaitForSingleObject
,然後針對進程句柄調用GetExitCodeProcess
。但我不能等待這個過程退出,因爲它可能會一直存在。
另一個示例建議可能是致電WaitForInputIdle
,如果我希望通過我可以合理預期發射窗創建的窗口與發射窗進行通信,那麼這將很有效。但我不希望這一點,也不能合理地期待這一點。據我所知,launchee是一個控制檯進程和/或永遠不會有消息隊列。同樣,我不能等待(以啓發式的意圖)來找出答案。
事實上,我不能假設任何有關這個推銷員。
爲了更好地瞭解我在這裏的想法,讓我們看看問題的另一面。如果這個過程沒有開始,我想要一個錯誤代碼告訴我如何建議用戶。如果導入全部解決,並且主線程意識到它即將跳入CRT啓動代碼(或等效),並且我得到的錯誤代碼是ERROR_SUCCESS
,太棒了!但是我實際上並不熱衷於這個啓動程序,只是希望在啓動程序中提供良好的用戶體驗。
哦,還有一件事:我希望這很簡單。我不想寫一個調試器。 :-)
想法?
對於它的價值,使用DEBUG_PROCESS啓動非常簡單,但可能會產生您不想要的副作用。 – tenfour 2011-02-15 03:14:02
如果你想捕獲你正在啓動的進程無法解析其所有導入,你是否也想捕獲它何時拋出異常並且無法捕獲它?什麼時候它決定只是跑到無效的內存和段錯誤?或者如果它因爲命令行參數錯誤而決定終止?從用戶體驗的角度來看,所有這些「不起作用」的情況都非常類似於非技術人員。 – 2011-02-15 03:14:47