如何使用ShellExecuteEx确保exe启动

时间:2011-06-15 04:43:46

标签: c++ winapi

我有一个EXE1,启动时需要一个Config文件。

我正在使用ShellExecuteEx从EXE2启动EXE1。

它正常工作,但是如果没有为EXE1预设配置文件,那么它不会启动但是ShellExecuteEx返回TRUE(1)。
我正在检查ShellExecuteEx的返回值以禁用启动EXE1的EXE2中的“Launch”BUtton。

由于ShellExecuteEx返回TRUE(1)所以启动按钮是禁用哪个错误的功能。

我也尝试使用CreateProcess,它的行为方式也相同。

如何确保启动exe。

2 个答案:

答案 0 :(得分:2)

您必须以某种方式从第二个程序发信号到第一个程序 - 通过使用共享内存,突变体或其他一些进程间通信方法。

ShellExecuteEx只关心可执行文件是否能够启动,而不是它是否能够按预期执行。

或者,使用CreateProcess代替并监视子进程的返回代码。

答案 1 :(得分:1)

如果

ShellExecuteEx能够启动可执行文件,则返回true。它实际上并没有传达启动的应用程序的返回代码。

您可以使用WaitForSingleObjecthProcess struct中启动的应用程序句柄(SHELLEXECUTEINFO)上等待几毫秒。如果WaitForSingleObject返回WAIT_OBJECT_0WAIT_ABANDONED,您可以'假设'已启动的应用已退出。如果启动的应用程序继续运行,那么您的等待将超时。但是,这不是一个万无一失的方法。一种更强大的方法是在应用程序之间使用pipe之类的IPC机制。