В этом посте я расскажу о том, как исправить ошибку Класс не зарегистрирован при запуске Google Chrome. Возникает она в случаях когда Google Chrome должен запуститься с определенным URL в качестве параметра, т.е. например вы открываете двойным кликом html файл на диске, браузером по-умолчанию при этом у вас установлен Chrome - и получаете ошибку "Класс не зарегистрирован". Такое же поведение может наблюдаться когда, например, вы пытаетесь кликнуть по ссылке в письме, открытом в почтовой программе и т.п. С чем это связано?
Если на ПК устанавливались несколько версий Google Chrome - например, обычная и Canary (dev-версия браузера), и что-то из этого некорректно было удалено, или же, если вы устанавливали user-level версию Google Chrome (которая ставится в папку профиля пользователя, а не в Program Files), а потом вдруг решили установить Google Chrome системного уровня, т.е. запустили установщик от имени администратора - то почти наверняка вы получите эту ошибку. Долгое и вдумчивое чтение интернета по этому поводу может навести на массу решений, но все они "половинчатые". Долго время с пользовался скриптом chromefix.cmd для решения этой проблемы:
Здесь все банально и просто, удаляется ветка 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:
Бинго ... Проблема "Класс не зарегистрирован!" в Google 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)", где обсуждается аналогичная проблема.
comment 0 التعليقات:
more_vertsentiment_satisfied Emoticon