ShellExecuteEx
Win32 函数调用SEE_MASK_FLAG_NO_UI
在其结构中有一个标志,该标志SHELLEXECUTEINFO
应禁止在启动应用程序时因错误而显示的任何错误对话框。
这里的 MSDN 文档对此非常明确:
SEE_MASK_FLAG_NO_UI
0x00000400. Do not display an error message box if an error occurs.
在我的例子中,我在没有安装 .NET 的 Windows XP 系统上启动一个 .NET 可执行文件。我系统地收到以下消息,由 Windows 在对话框窗口中显示:
Xxx.exe - Application Error
The application failed to initialize properly (0xc0000135).
Click on OK to terminate the application.
[ OK ]
我不希望用户必须处理此消息。我宁愿从ShellExecuteEx
我的程序中取回错误代码并能够优雅地处理它。这是我用来启动外部可执行文件的代码片段:
#include <windows.h>
int wmain(int argc, wchar_t* argv[])
{
SHELLEXECUTEINFO info;
memset(&info, 0, sizeof(SHELLEXECUTEINFO));
info.cbSize = sizeof(SHELLEXECUTEINFO);
info.fMask = SEE_MASK_FLAG_NO_UI;
info.lpVerb = L"open";
info.lpFile = L"Xxx.exe";
info.nShow = SW_SHOW;
return ShellExecuteEx (&info);
}
如果系统上不存在 .NET,是否有官方方法可以抑制错误消息?还是我必须在执行应用程序之前自己检查这个特定条件(但我事先不知道它是 .NET 应用程序还是本机应用程序)。例如,如果我正在启动的应用程序缺少一些 DLL,该怎么办?