Программный запуск браузера по умолчанию с помощью Visual C++

В этой статье показано, как запустить интернет-браузер по умолчанию с помощью управляемых расширений для Visual C++.

Исходная версия продукта: Visual C++
Исходный номер базы знаний: 307382

Примечание.

Укажите URL-адрес, FTP или файл для открытия

Можно указать URL-адрес, файл или FTP-адрес. Допустимы все три из этих назначений:

System::String * target= "http://www.microsoft.com";
System::String * target = "ftp://ftp.microsoft.com";
System::String * target = "C:\\Program Files\\Microsoft Visual Studio\\INSTALL.HTM";

Использование метода Process class Start для запуска браузера

Класс Process содержит статический Start метод. Так как это статический метод, можно вызвать Start без экземпляра Process класса .

System::Diagnostics::Process::Start(target);

Предоставление обработки исключений

Так как при вызове Start метода используется свойство по умолчаниюUseShellExecute, вам не нужно явно запрашивать реестр, чтобы определить, какой браузер используется по умолчанию. Однако при использовании этого подхода на компьютере, на котором не установлен браузер, возникает исключение. Это исключение должно быть перехватано, чтобы можно было выполнить соответствующее действие. В этом примере явным образом отображается ошибка, которая возникает при отсутствии необходимого раздела реестра и указывает на то, что браузер не установлен. Кроме того, для других ошибок, которые могут возникнуть, предоставляется общий обработчик исключений. Блок try...catch показан в полном примере кода.

Полный пример кода

#using <mscorlib.dll>
#using <system.dll>
#using <System.Windows.Forms.dll>
int main()
{
    //Use no more than one assignment when you test this code.
    //System::String * target= "http://www.microsoft.com";
    //System::String * target = "ftp://ftp.microsoft.com";
    System::String * target = "C:\\Program Files\\Microsoft Visual Studio\\INSTALL.HTM";
    try
    {
        System::Diagnostics::Process::Start(target);
    }
    catch (System::ComponentModel::Win32Exception * noBrowser)
    {
        if (noBrowser->ErrorCode==-2147467259)
           System::Windows::Forms::MessageBox::Show(noBrowser->Message);
    }
    catch (System::Exception * other)
    {
        System::Windows::Forms::MessageBox::Show(other->Message);
    }
    return 0;
}

Устранение неполадок

Этот код в значительной степени зависит от сопоставлений типов приложений и файлов в HKEY_CLASSES_ROOT кусте реестра. Что может привести к непредвиденным результатам и исключениям в случае повреждения реестра. Кроме того, типы файлов и расширения могут быть связаны с приложениями, отличными от браузера. Например, файлы HTM или HTML-файлы могут быть связаны с программным обеспечением веб-разработки, а не с браузером.