Вызов функции ShellExecuteEx
Win32 имеет в структуре SHELLEXECUTEINFO
флаг SEE_MASK_FLAG_NO_UI
, который должен подавлять любые сообщения об ошибках, которые могут отображаться из-за ошибки при запуске приложения.
Документация 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, например?