Я использую "ShellExec" в c ++ и Windows, чтобы открыть URL в браузере по умолчанию.
Для очень немногих клиентов происходит сбой со следующим сообщением: «У этого файла нет программы, связанной с ним для выполнения этого действия». Я понимаю, что это означает, что в реестре для этого клиента отсутствует или недействительна ассоциация типов файлов "http".
Вопросы:
Могу ли я обнаружить эту проблему программно и исправить или избежать ее?
- Я думал об использовании AssocQueryKey и RegQueryValueEx, но не уверен, что это возможно.
Я ценю любые советы по исправлению. У меня нет системы, которая показывает проблему, поэтому я надеюсь, что кто-то здесь уже решил проблему.
Это код для открытия браузера. urlToNavigateTo будет что-то вроде "http://www.website.com/function?key=9271"
ErrorClass error;
SHELLEXECUTEINFO execInfo;
ZeroMemory (&execInfo, sizeof(SHELLEXECUTEINFO));
execInfo.cbSize = sizeof(SHELLEXECUTEINFO);
execInfo.lpFile = urlToNavigateTo.c_str();
execInfo.nShow = SW_SHOWNORMAL;
execInfo.hwnd = m_hWnd; // parent window for error messages
BOOL bOK = ShellExecuteEx (&execInfo);
if (bOK!=TRUE) {
STRING errMessage = _T("Could not navigate to url Reason:" )+ FACTORY->GetUtils()->GetPlatformErrorMessage(GetLastError());
LOG_ERROR(errMessage);
error.Assign(errMessage);
}