ShellExecuteEx
Win32函数调用在其SEE_MASK_FLAG_NO_UI
结构中有一个标志SHELLEXECUTEINFO
,它应该禁止因启动应用程序时出错而显示的任何错误对话框。
MSDN文档here非常清楚:
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,例如?
答案 0 :(得分:4)
该标志仅告诉shell不显示错误消息。它不会影响已启动进程的UI。 .NET .exe确实已经开始了,所以ShellExecuteEx()完成了它的工作并且没有看到任何错误。它决定随后炸弹并让用户知道它不是你可以轻易修复的东西。
答案 1 :(得分:0)
为什么不使用CreateProcess函数