среда, 15 апреля 2015 г.

Google Chrome. Ошибка "Класс не зарегистрирован".

В этом посте я расскажу о том, как исправить ошибку Класс не зарегистрирован при запуске Google Chrome. Возникает она в случаях когда Google Chrome должен запуститься с определенным URL в качестве параметра, т.е. например вы открываете двойным кликом html файл на диске, браузером по-умолчанию при этом у вас установлен Chrome - и получаете ошибку "Класс не зарегистрирован". Такое же поведение может наблюдаться когда, например, вы пытаетесь кликнуть по ссылке в письме, открытом в почтовой программе и т.п. С чем это связано?

Если на ПК устанавливались несколько версий Google Chrome - например, обычная и Canary (dev-версия браузера), и что-то из этого некорректно было удалено, или же, если вы устанавливали user-level версию Google Chrome (которая ставится в папку профиля пользователя, а не в Program Files), а потом вдруг решили установить Google Chrome системного уровня, т.е. запустили установщик от имени администратора - то почти наверняка вы получите эту ошибку. Долгое и вдумчивое чтение интернета по этому поводу может навести на массу решений, но все они "половинчатые". Долго время с пользовался скриптом chromefix.cmd для решения этой проблемы:

reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ChromeHTML\shell\open\command /v DelegateExecute /f
reg delete HKEY_CURRENT_USER\SOFTWARE\Classes\ChromeHTML\shell\open\command /v DelegateExecute /f

Здесь все банально и просто, удаляется ветка DelegateExecute в ChromeHTML и проблема "уходит" до следующей перезагрузки ПК. Но давайте попробуем разобраться чем она вызвана? В параметре DelegateExecute указан CLSID {5C65F4B0-3651-4514-B207-D10CB699B14B} который должен указывать на путь к delegate_execute.exe рабочей версии Google Chrome. У меня Windows 8.1 x64 и Google Chrome системного уровня. Т.е. у меня все что относится к Chrome'у находилось в папке "C:\Program Files (x86)\Google\Chrome\Application\42.0.2311.90" (!) ... Теперь запускаем поиск по имени CLSID в реестре, т.е. просто ищем 5C65F4B0-3651-4514-B207-D10CB699B14B и смотрим внутрь параметра LocalServer32:


Как видно на приведенном скриншоте - в моем случае путь указан правильный. но CLSID {5C65F4B0-3651-4514-B207-D10CB699B14B} находится не только в HKEY_CLASSES_ROOT\Wow6432Node\CLSID\, но и в HKEY_CURRENT_USER\Software\Classes\Wow6432Node\CLSID\, и в HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\ ... И вот как раз там я обнаружил старый путь к delegate_execute.exe, который указывал на копию Chrome user-level, т.е. на когда-то находившийся в папке с профилем. Достаточно было заменить все пути в {5C65F4B0-3651-4514-B207-D10CB699B14B}\LocalServer32 на корректный и все стало работать. 

Т.е. общий алгоритм действий такой:

  • Выясняем какой именно Google Chrome у нас стоит, пользовательского уровня или системного. Если системного он должен быть у нас в Program Files, если пользовательского, то в папке с профилем. 
  • Заходим в папку, в ней будут подпапки с версиями, выбираем текущую (последнюю) и копируем этот путь, например, в блокнот, дописывая к нему delegate_execute.exe в конце. Т.е. у меня полностью получилось так - "C:\Program Files (x86)\Google\Chrome\Application\42.0.2311.90\delegate_execute.exe" 
  • Далее запускаем редактор реестра и ищем в нем раздел 5C65F4B0-3651-4514-B207-D10CB699B14B, их может быть несколько, в HKEY_CLASSES_ROOT, в HKEY_CURRENT_USER и т.п. Заходим в каждый из найденных разделов и смотрим внутрь LocalServer32, так, как показано на картинке выше.
  • Как видно, путь к delegate_execute.exe там указан в параметре (По-умолчанию) и в ServerExecutable.
  • Если путь отличается от пути который мы запомнили на первом шаге, то исправляем на верный в двух местах и ищем следующий раздел 5C65F4B0-3651-4514-B207-D10CB699B14B, в котором проводим аналогичную операцию.
  • Повторяем все это до тех пор, пока поиск в реестре не завершится.

Бинго ... Проблема "Класс не зарегистрирован!" в Google Chrome решена.

p.s. Ну и плюсом можете почитать различные Issue в обсуждениях, например вот это - Issue 171355: "Class not registered" error when launching Chrome from AppId related entry point (shortcut or anything to do with default browser)", где обсуждается аналогичная проблема.

21 комментарий :

  1. Спасибо, Ваш способ мне помог! :)

    ОтветитьУдалить
  2. Отличное решение, спасибо:)

    ОтветитьУдалить
  3. Скажите , а что за цифры \42.0.2311.90 , у меня в C:\Program Files (x86)\Google\Chrome\Application цифр нет, а в реестре другие 44.0. 2403.157 Какие ставить?

    ОтветитьУдалить
    Ответы
    1. Найдите папку куда у вас фактически установлен Google Chrome и укажите полный путь к delegate_execute.exe в реестре, как описано в статье.

      Удалить
  4. У меня нет вот такого {5C65F4B0-3651-4514-B207-D10CB699B14B}
    И даже ничего похожего на это

    ОтветитьУдалить
    Ответы
    1. Думать естественно ;) Т.е. посмотреть в каком CLSID у вас прописан вызов delegate_execute.exe для Chrome.

      Удалить
  5. Автор безусловно виртуоз. Но запустить инсталлятор ChromeSetup.exe, который сам все восстановит и починит секунд за 20, проще и быстрее. Для средне-статистического пользователя.

    ОтветитьУдалить
    Ответы
    1. В том-то и дело что в некоторых случаях ничего он не починит и проблема останется даже после полной переустановки Chrome.

      Удалить
  6. Столкнулся с этой проблемой на 8.1, установил GH поверх стоявшей версии. При запуске ярлыком получил ошибку "Класс не зарегистрирован". Удаление и повторный запуск инсталлятора не помог. Выполнение действий, указанных в этой статье помогло решить проблему. Спасибо автору!

    ОтветитьУдалить
  7. была такая же проблема, после отката с 10 на 8.1 не запускался Chrome с ярлыка. Поменял в регистре путь и все ОК. Автору респект!

    ОтветитьУдалить
  8. Не нашел CLSID в котором прописан вызов delegate_execute.exe
    Помог просто запуск delegate_execute.exe в режиме Run as administrator.
    Автору спасибо за статью

    ОтветитьУдалить
    Ответы
    1. У меня была антологичная ситуёвина. Помог именно этот способ. Зачем ковыряться в реестре, если так проще?

      Удалить
  9. Благодарю за инструкцию.
    Сегодня совершенно неожиданно вылезла данная проблема и вышеописанные манипуляции с реестром, вроде бы, помогли.
    Остается надеяться что все не сломается снова при обновлении.

    ОтветитьУдалить
  10. В Вынь 10 это довольно не так, но очень похоже... см. https://www.youtube.com/watch?v=Eghso7L--Ac

    ОтветитьУдалить
  11. Устанавливал portable, вообще разделов с длинным номером не нашел, хотя в ссылке на DelegateExecute они указаны.

    ОтветитьУдалить
  12. Тоже поставил Chrome portable на Win 8.1. Разделов нет с длинным номером. Класс не зарегистрирован, когда запускаю Windows Live Mail и пытаюсь открыть любую ссылку в письме.
    Проблему с запуском Chrome через ярлык на начальном экране (меню пуск) решил немного по-другому - написал на VB6 программульку, которая делает тупо его вызов, т.к. экзешник запускается без проблем с установленной совместимостью администратора, проблемы с классом - только для ярлыков и панели начального экрана.
    VB6: Добавить стандартную форму, сделать для нее Vsible = False, добавить иконку как у Chrome.
    Код:
    Private Sub Form_Load()
    On Error Resume Next
    Shell "chrome.exe"
    End
    End Sub
    Кому надо могу скинуть скомпилированное в exe - записать на жесткий, добавить на начальный экран.

    ОтветитьУдалить
  13. Разобрался. Windows 8.1, класс не зарегистрирован при попытке в приложениях открыть интернет ссылки в Chrome. Для решения этой проблемы следуем инструкции, описанной автором поста, НО! в (по умолчанию) не указываем ссылку на delegate_execute.exe, а ставим: "C:\Program Files\Google\Chrome\Application\chrome.exe" -- "%1"

    ОтветитьУдалить
  14. После описанных операций все заработало нормально, но когда нажимал на ярлык в меню пуск, то программа пыталась скачивать саму себя. Нашел как исправить: идем HKEY_CLASSES_ROOT\Chrome\.exe\shell\open\command\ и в параметре (По умолчанию) ставим: "C:\Program Files\Google\Chrome\Application\chrome.exe"
    Также у меня для chrome.exe и для delegate_execute.exe стоит запуск под администратором. (PS программка VB6 описанная выше - не нужна!)

    ОтветитьУдалить