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がインストールされていない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?