代码之家  ›  专栏  ›  技术社区  ›  Pierre Arnaud

在没有.NET的系统上启动.NET应用程序时,带有SEE_MASK_FLAG_NO_UI的ShellExecuteEx显示错误

  •  2
  • Pierre Arnaud  · 技术社区  · 16 年前

    这个 ShellExecuteEx SEE_MASK_FLAG_NO_UI SHELLEXECUTEINFO 结构,该结构应抑制由于启动应用程序时出错而可能显示的任何错误对话框。

    here 这一点非常明确:

    SEE_MASK_FLAG_NO_UI
      0x00000400. Do not display an error message box if an error occurs.
    

    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);
    }
    

    2 回复  |  直到 16 年前
        1
  •  4
  •   Hans Passant    16 年前

    该标志仅告知shell不显示错误消息。它不会影响已启动流程的UI。.NET.exe确实启动了,所以ShellExecuteEx()完成了它的工作,没有发现任何错误。它决定在事后轰炸并让用户知道这件事,这不是你可以轻易修复的。

        2
  •  0
  •   Remus Rigo    16 年前

    你为什么不使用 CreateProcess 功能