用的ShellExecuteEx显示SEE_MASK_FLAG_NO_UI错误启动对系统的.net应用程序时,没有.NET
-
22-09-2019 - |
题
在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,例如?
解决方案
在标志只告诉shell为不显示错误消息。它不影响起步过程的UI。在.NET名.exe确实开始这样的ShellExecuteEx()做了它的工作,看到没有错误。它决定轰炸之后,让用户知道它是不是你可以很容易地解决。
其他提示
你为什么不使用 CreateProcess的功能
不隶属于 StackOverflow