ShellExecute с использованием URL приводит к сообщению об ошибке, не связанной с ним.Какая файловая ассоциация отсутствует? - PullRequest
1 голос
/ 22 апреля 2011

Я использую "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);
    }

1 Ответ

3 голосов
/ 22 апреля 2011

Вы не говорите, какое действие вы хотите выполнить. В этом случае вы хотите выполнить действие open .

ShellExecute(0, "open", "http://www.website.com/function?key=9271", 0, 0, SW_SHOWNORMAL);

С ShellExecuteEx это означает, что вы добавите:

execInfo.lpVerb = "open"
...