2

ShellExecuteExWin32関数呼び出しの構造にはフラグが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がインストールされていないWindowsXPシステムで.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);
}

Is there an official way of suppressing the error message if .NET is not present on the system? Or do I have to check for this specific condition myself before executing the application (but I do not know in advance if it is a .NET app or a native app). And what if the app I am starting is missing some DLLs, for instance?

4

2 に答える 2

4

フラグは、エラーメッセージを表示しないようにシェルに指示するだけです。開始したプロセスのUIには影響しません。.NET .exeは実際に開始されたので、ShellExecuteEx()はその役割を果たし、エラーは発生しませんでした。後で爆撃し、それをユーザーに知らせることにしたことは、簡単に修正できるものではありません。

于 2010-01-21T19:03:13.170 に答える
0

CreateProcess関数を使用してみませんか

于 2010-01-21T10:56:12.487 に答える