用的ShellExecuteEx显示SEE_MASK_FLAG_NO_UI错误启​​动对系统的.net应用程序时,没有.NET

StackOverflow https://stackoverflow.com/questions/2108159

  •  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的功能

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top