Не удалось выполнить проверку обновлений код ошибки 3 0x80040154

Исправление ошибки Windows Installer 0x80040154 / Хабр

Исправление ошибки Windows Installer 0x80040154

В этой статье я расскажу об исправлении одной очень распространенной ошибки 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.

У вас может быть аналогичная проблема, но при этом отсутствовать другой ключ реестра. Импортировать при этом необходимо те ключи, которых у вас нет.

Выводы

Спасибо за внимание, я очень надеюсь что статья вам понравилась, жду ваших отзывов, а также с удовольствием отвечу на ваши вопросы.

Почему недоступен сервер обновления для браузера Google Chrome

При попытке проверить наличие обновлений для браузера в окне «О Google Chrome» может появиться сообщение об ошибке. Запишите сообщение об ошибке (или отсутствии таковой).

Сервер обновлений недоступен (ошибка 1)

Ошибка 1 означает, что Google Chrome невозможно обновить в его текущем каталоге.

Сначала в окне О Google Chrome проверьте номер версии Google Chrome, которой вы пользуетесь.

Chromium можно получить, если загрузить исходный код и создать собственную версию браузера или скопировать версию сборки от кого-то, кто создал её из исходного кода.

Сервер обновлений недоступен (ошибка 3)

Ошибка 3 указывает на ошибку соединения с сервером обновления Google.

Это распространенная проблема функции автоматического обновления Google Chrome. Чтобы её решить, нужно запустить Google Chrome С правами обычного пользователя. Кроме того, из соображений безопасности не рекомендуется устанавливать запуск Google Chrome только с правами администратора.

Сервер обновлений недоступен (ошибка 4)

Если Ошибка 4 возникает постоянно, подробно опишите проблему на справочном форуме.

Сервер обновлений недоступен (ошибка 7)

Ошибка 7 означает, что обновление загружено, но не установлено должным образом.

Попробуйте перезапустить свой компьютер. Откройте Диспетчер задач Windows и проверьте, отображается файл GoogleUpdate. exe или GoogleUpdateOnDemand. exe в списке процессов. Если да, попробуйте снова установить обновления с веб-браузера.

Проверка обновлений не завершается

Если постоянно появляется сообщение «Проверка обновлений» и значок вращается, это означает, что серверу обновлений Google не удалось подключиться к веб-браузеру Google Chrome. Убедитесь, что на компьютере установлена последняя версию Google Chrome.

Сообщение или статус обновления не отображаются

Если в нижней части окна О Google Chrome не отображается сообщение о статусе (как «Обновления»), это означает, что обновление по запросу отключено.

Убедитесь, что на компьютере установлена Последняя версия Google Chrome.

Источники:

Https://habr. com/ru/sandbox/33155/

Https://webznam. ru/publ/google/chrome/oshibki_obnovlenija_chrome_server_nedostupen/2-1-0-117