В этой статье я расскажу об исправлении одной очень распространенной ошибки Windows Installer. Обыскавши Интернет как русскоязычный, так и англоязычный, включая форумы и ньюсгруппы Microsoft, я понял что ошибка довольно распространенная, однако исправить ее, на самом деле никому не удавалось.
Суть проблемы
Как то одним жарким летним вечером я решил установить на свой компьютер ActeiveState ActivePerl. Скачал инсталлятор, который был в .msi файле и запустил его. Каково же было мое удивление, когда вместо привычного инсталлятора я увидел вот это:
Как вскоре оказалось, подобная ошибка выпадала при запуске на моем компьютере любого .msi файла.
Недолго думая, я полез в интернет, ввел в поиск появившееся сообщение, и, «О ужас!» — я увидел сотни постов людей с этой проблемой! В русскоязычном и англоязычном сегменте Интернета у множества людей была аналогичная проблема, и никто ее не смог решить по существу.
Решение проблемы
Для начала я включил Log-файл установщика Windows. Как включить лог Windows Installer вы можете почитать здесь, или поискать в любом поисковике по ключевому слову "voicewarmup".
Лог-файлы появляются во временной папке пользователя, которая обычно находится по пути C:\Users\имя_профиля\AppData\Local\Temp. Открыв лог, я увидел следующую ошибку:
MSI (c) (B8:84) [22:08:06:894]: Failed to connect to server. Error: 0x80040154
Поискав по коду ошибки в Интернете, и не нашедши никаких способов решения проблемы, я решил подумать логически.
Что означает ошибка 0x80040154? Поискав в поисковике, и воспользовавшись утилитой Error Lookup, я определил, что ошибка означает «Класс не зарегистрирован».
Обычно такая ошибка появляется, когда вы запрашиваете у системы создать COM-объект, который не был должным образом зарегистрирован в реестре. Но как определить какой именно объект не зарегистрирован?
Для начала я воспользовался старым добрым отладчиком WinDbg, который входит в пакет Debugging Tools For Windows. Мне понадобилась именно 64-разрядная версия данного отладчика.
Перед началом отладки необходимо загрузить отладочные символы для распознавания имен системных функций и переменных. Эти символы являются довольно полезной вещью не только для поиска ошибок, но также и для исследования работы Windows в целом.
Я предпочитаю указывать отладчику путь для поиска символов через переменную среды _NT_SYMBOL_PATH, которая должна быть задана как: C:\Symbols;srv*C:\Symbols*https://msdl.microsoft.com/download/symbols. В данном случае папка C:\Symbols — это хранилище загруженных символов на жестком диске, чтобы отладчик каждый раз не лез в интернет за ними.
Загрузил я в отладчик файл c:\windows\system32\msiexec.exe и задал для него параметры командной строки так, чтобы он открыл .msi файл. В моем случае параметром командной строки было: /i «C:\Users\MAV\Desktop\ActivePerl-5.12.4.1205-MSWin32-x64-294981.msi» однако можно задавать путь к любому другому .msi файлу.
Сам по себе отладчик, конечно не решит проблему, нужно ее локализовать. Поразмыслив, какие функции могут создавать COM-объекты, я остановился на CoCreateInstance, CoCreateInstanceEx и CoGetClassObject
Для установки точек прерывания на эти функции вводим в командной строке отладчика:
bp ole32!CoCreateInstance
bp ole32!CoCreateInstanceEx
bp ole32!CoGetClassObject
Если точки останова у вас не ставятся, значит вы неправильно настроили символы.
После запуска приложения (F5), срабатывает точка останова на ole32!CoCreateInstance. Если точка останова не срабатывает, а выпадает окно с параметрами Wndows Installer, то вы неправильно указали параметры командной строки для запуска.
Давайте теперь посмотрим, из какого же места кода вызывается создание нашего объекта, для этого мы можем нажать Debug->Step Out (Shift+F11). Мне пришлось нажать указанную комбинацию дважды, для того чтобы выйти в исходную вызывающую функцию.
Исходная вызывающая функция называется msi!CreateMsiServerProxy и, очевидно, находится в модуле msi.dll.
Запомнив имя функции, а также примерный вид искомого кода, я открыл дизассемблер IDA Pro, и загрузил в него файл msi.dll. Следует отметить пару особенностей данного отладчика: во первых, IDA любит блокировать доступ к исследуемому файлу, во вторых, она создает в папке с исследуемым файлом несколько своих файлов баз данных, так что я рекомендую копировать исследуемые файлы в отдельную папку. В третьих, IDA не всегда подгружает файлы с символами, поэтому рекомендую в указанную отдельную папку также скопировать файл msi.pdb из вышеуказанной папки C:\Symbols.
После нахождения функции CreateMsiServerProxy, находим знакомые строки кода в ней:
Не иначе как функция пытается создать объект по CLSID IID_IMsiServer. Здесь я не буду вдаваться в подробности COM и искать различия между CLSID и IID, важно что я получил зацепку — имя интерфейса ID_IMsiServer и CLSID .
Windows Registry Editor Version 5.00
После импорта ключа реестра я вновь попробовал запустить .msi файл, и, «О чудо!», он запустился, после чего я успешно установил ActivePerl.
У вас может быть аналогичная проблема, но при этом отсутствовать другой ключ реестра. Импортировать при этом необходимо те ключи, которых у вас нет.
Выводы
Спасибо за внимание, я очень надеюсь что статья вам понравилась, жду ваших отзывов, а также с удовольствием отвечу на ваши вопросы.
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
Исправляем ошибку «Класс не зарегистрирован» в Windows 10
Windows 10 – весьма капризная операционная система. Нередко при работе с ней у пользователей возникают различные сбои и ошибки. К счастью, большинство из них можно исправить. В сегодняшней статье мы расскажем вам о том, как избавиться от сообщения «Класс не зарегистрирован», которое может появиться при различных обстоятельствах.
Виды ошибки «Класс не зарегистрирован»
Уведомление о том, что «Класс не зарегистрирован», может появиться по разным причинам. Оно имеет приблизительно следующий вид:
Чаще всего упомянутая выше ошибка возникает в следующих ситуациях:
Ниже мы рассмотрим каждый из указанных случаев более детально, а также опишем действия, которые помогут исправить проблему.
Трудности с запуском веб-обозревателя
Если при попытке запустить браузер вы видите сообщение с текстом «Класс не зарегистрирован», тогда необходимо выполнить следующие действия:
Если ошибка «Класс не зарегистрирован» наблюдалась при запуске Internet Explorer, тогда можно выполнить следующие манипуляции для устранения проблемы:
Как вариант, можно всегда переустановить программу. Как это сделать, мы рассказывали на примере самых популярных браузеров:
Ошибка при открытии изображений
Если у вас при попытке открыть любое изображение появляется сообщение «Класс не зарегистрирован», тогда необходимо сделать следующее:
Обратите внимание, что в этом случае все «Приложения по умолчанию» будут использовать стандартные настройки. Это значит, что вам необходимо будет повторно выбрать программы, которые отвечают за отображение веб-страницы, открытие почты, проигрывание музыки, фильмов и т.д.
Проделав такие простые манипуляции, вы избавитесь от ошибки, которая возникала при открытии изображений.
Проблема с запуском стандартных приложений
Иногда при попытке открыть стандартное приложение Windows 10 может появиться ошибка «0x80040154» или «Класс не зарегистрирован». В таком случае следует деинсталлировать программу, после чего установить ее повторно. Делается это весьма просто:
К сожалению, не все встроенные программы удалить так просто. Некоторые из них защищены от подобных действий. В таком случае их необходимо деинсталлировать с помощью специальных команд. Более подробно данный процесс мы описывали в отдельной статье.
Не работает кнопка «Пуск» или «Панель задач»
Если при нажатии на «Пуск» или «Параметры» у вас ничего не происходит, не спешите расстраиваться. Есть несколько методов, которые позволяют избавиться от проблемы.
Специальная команда
В первую очередь следует попробовать выполнить специальную команду, которая поможет вернуть работоспособность кнопке «Пуск» и другим составляющим. Это одно из самых действенных решений проблемы. Вот что необходимо сделать:
Перерегистрация файлов
Если предыдущий метод вам не помог, тогда стоит попробовать следующее решение:
Проверка системных файлов на наличии ошибок
Напоследок вы можете провести полную проверку всех «жизненно необходимых» файлов на компьютере. Это позволит исправить не только указанную проблему, но и заодно много других. Выполнить подобное сканирование можно как при помощи стандартных средств Windows 10, так и путем использования специального софта. Обо всех нюансах такой процедуры мы рассказывали в отдельной статье.
Помимо описанных выше методов, есть также дополнительные варианты решения проблемы. Все они в той или иной степени способны помочь. Детальную информацию вы найдете в отдельной статье.
Универсальное решение
Независимо от того, при каких обстоятельствах появляется ошибка «Класс не зарегистрирован», есть одно универсальное решение по данному вопросу. Суть его заключается в регистрации недостающих компонентов системы. Вот что необходимо сделать:
По окончании регистрации нужно закрыть окно настроек и перезагрузить систему. После этого снова попробуйте выполнить операцию, во время которой появлялась ошибка. Если предложения о регистрации компонентов вы не увидели, значит, она не требуется вашей системе. В таком случае стоит попробовать методы, которые описаны выше.
Заключение
На этом наша статья подошла к концу. Надеемся, вам удастся решить возникшую проблему. Помните, что причиной большинства ошибок могут быть вирусы, поэтому не забывайте периодически проводить проверку своего компьютера или ноутбука.
Мы рады, что смогли помочь Вам в решении проблемы.
Помимо этой статьи, на сайте еще 11804 инструкций.
Добавьте сайт Lumpics.ru в закладки (CTRL+D) и мы точно еще пригодимся вам.
Отблагодарите автора, поделитесь статьей в социальных сетях.
Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.