2011-06-15 66 views
0

我有一個EXE1,它在啓動時需要配置文件。如何使用ShellExecuteEx確保exe啓動

我使用ShellExecuteEx從EXE2啓動EXE1。

它正常工作,但如果配置文件沒有爲EXE1預設,那麼它不會啓動,但ShellExecuteEx返回TRUE(1)。
我正在檢查ShellExecuteEx的返回值,以禁用啓動EXE1的EXE2中的「啓動」BUtton。

因爲ShellExecuteEx返回TRUE(1),所以啓動按鈕是禁用哪個錯誤的功能。

我也嘗試過使用CreateProcess,它的行爲方式也是一樣的。

如何確保exe是否啓動。

回答

2

您必須以某種方式從第二個程序發出第一個程序 - 使用共享內存,突變或其他進程間通信方法。

ShellExecuteEx只關心可執行文件是否能夠啓動,而不關心它是否能夠執行您期望的操作。

或者,改爲使用CreateProcess並監視子進程的返回代碼。

+0

甚至CreateProcess返回true.What你的意思是監視我需要監視 – 2011-06-15 05:32:39

+0

@Chris_vr:其他可執行文件的退出代碼。如果啓動失敗,它可能會有一個非零的退出代碼。如果成功,那麼它將有一個退出代碼等於零,或者它不會終止(取決於程序等)。 – 2011-06-15 16:24:37

1

ShellExecuteEx如果能夠啓動可執行文件,則返回true。它實際上並未傳達啓動應用程序的返回碼。

您可以使用WaitForSingleObjectSHELLEXECUTEINFO結構中啓動的應用程序句柄(hProcess)上等待幾毫秒。如果WaitForSingleObject返回WAIT_OBJECT_0WAIT_ABANDONED,則可以'假定'已啓動的應用程序已退出。如果啓動的應用程序繼續運行,那麼您的等待會超時。但是,這不是一個萬無一失的方法。更可靠的方法是在應用程序之間使用pipe等一些IPC機制。