Отчасти в связи с выпуском Windows phone домашние пользователи стали более внимательно относится к целому комплексу программ для домашних пользователей, созданных компанией Microsoft. Нередко у них возникают ошибки при установке той или иной программы. В одной из рассылок от компании Microsoft наткнулся на решение одной из проблем при установке антивируса от компании Microsoft - Microsoft Security Essentials специалистом Марком Русиновичем в своем блоге. Решил воспроизвести эту заметку здесь.
Как читатель этого блога, я подозреваю, что и вы, подобно мне, являетесь обслуживающим ИТ-персоналом для вашей семьи и друзей. И, спорю, многие из вас выполняют обязанности по системному обслуживанию, когда приходят в гости к родственникам или друзьям во время каникул. Каждый раз, когда я навещаю свою маму, я обычно выделяю несколько минут, чтобы запустить Sysinternals Process Explorer и Autoruns, а также просмотреть страницу Program Uninstall из панели управления и почистить мусор, неизвестно откуда накопившийся с момента моего предыдущего визита. Однако на этот раз я столкнулся не просто с обычной проверкой. Мама недавно приобрела новый ПК, так что в результате я провел жуткий час, удаляя кучи OEM-овского мусора, загруженного в него (теперь я буду рекомендовать Microsoft Signature PC, который свободен от мусорных программ). Я сказал жуткий, потому, что это заняло время и потому, что даже простые приложения были сделаны как монстры, со сложной и продолжительной процедурой деинсталляции. Даже у гарантии OEM и файлов справки были полновесные процедуры установки. Ухудшая ситуацию, несколько приложений не смогли успешно деинсталлироваться либо выдавая сообщение об ошибке, либо оставляя после себя «бродячие» фрагменты, заставляя меня выслеживать их и наносить точные удары. Когда чистка подходила к концу, я заметил, что антивирус, который OEM поместил на ПК, имеет годовую лицензию, после чего придется покупать новую, чтобы продолжить обслуживание. Имея на рынке прекрасные бесплатные антивирусные решения, пользователям нет причин для покупки антивирусов, так что я сразу деинсталлировал его (что, конечно, оказалось многошаговой процедурой, занявшей около 20 минут и выдавшей несколько ошибок). Затем я отправился в Интернет чтобы скачать то, что я считаю – и неудивительно, принимая во внимание мою принадлежность – наилучшим бесплатным антивирусным решением, Microsoft Security Essentials (MSE). Спустя пару минут программа установки загрузилась, и запустился мастер установки. После нескольких щелчков на первых нескольких страницах он сообщил, что собирается установить MSE, но затем немедленно пожаловался на ошибку, которая не дает мастеру установки Security Essentials завершиться успешно:
Предложение «перезапустить компьютер и попробовать снова» предназначено для решения проблем, вызванных вмешательством от незавершенной деинсталляции существующего антивирусного ПО (или дает надежду на то, что условия, вызвавшие проблему с неожиданной ошибкой, являются преходящими). Я только что перезагрузился, поэтому это не подходило. Щелчок по ссылке «Получить помощь по ошибке» рекомендует самые общие шаги по устранению неисправности, вроде деинсталлировать другие антивирусы, убедиться в том, что сервис Windows Installer сконфигурирован и запущен (хотя по умолчанию он не работает в Windows 7, так как запускается по требованию), и если все не сработает, обратится в службу поддержки. Я предположил, что ситуация, с которой я столкнулся – достаточно редкая, и служба поддержки пользователей не сможет мне помочь (и что они скажут, если узнают, что Марк Руссинович обращается в службу поддержки?) , особенно после того как в Интернете не обнаружилось помощи по ошибке с кодом 0x80070643. Мой шурин, который также является программистом и одновременно специалистом по технической поддержке для своих соседей, заглядывал мне через плечо и подавал советы, так что я испытывал некоторое давление, пытаясь исправить ситуацию. Запустил свой любимый инструмент диагностики, Sysinternals Process Monitor (помните, «когда сомневаетесь запускайте Process Monitor»). Я перезапустил установку MSE, попутно записывая трассировку с помощью Process Monitor. Затем открыл представление дерева процессов программы, чтобы найти процессы, вовлеченные в предпринятую попытку установки, и идентифицировал Msiexec.exe (Windows Installer) и насколько запускающих процессов. Также я увидел, что Setup.exe запустил Wermgr.exe (Windows Error Reporting Manager), вероятно, для отправки в Microsoft отчета об ошибке:
Я переключил свое внимание назад к результатам трассировки и настроил фильтр так, чтобы исключить всё, кроме этих интересных процессов. Затем я начал трудоемкую работу прохождения по десяткам тысяч операций, надеясь найти иголку в стоге сена, объясняющую, почему установка подавилась ошибкой 0x80070643. Когда я бегло проглядывал журнал, чтобы получить общее представление, я заметил некоторые записи в файлы журнала:
Однако записи в них не обнаружили ничего кроме загадочного сообщения об ошибке, приведенной в диалоге. Через несколько минут я решил, что необходимо вернуться в журнале трассировки туда, где произошла ошибка, поэтому я перешел в дерево, выбрал Wermgr.exe и щелкнул «Go to event» (Перейти к событию):
Эта запись располагалась сразу после того, как setup встретил роковое условие. Затем я пролистал в журнале на несколько страниц вверх, ища следы. После нескольких минут поиска я обнаружил шаблон, встречающийся почти во всех операциях выше данной точки: Setup.exe пересчитывает все приложения, установленные системой. Я определил, что в реестре есть множество связанных с установками мест и смог определить имена приложений, найденные в колонке Details для некоторых из них. Например, здесь находится одна из OEM-программ, представляющая собой другой файл справки, выполненный как приложение, который я не догадался ранее удалить:
Теперь я мог быстро пробежаться по журналу, ища имена приложений. Минуту спустя я резко остановился, обнаружив то, чего я не должен был видеть – Microsoft Security Essentials:
Я знал, что не видел ее в списке установленных программ в «Панели управления» во время моего прошлого цикла деинсталляции, что я подтвердил путем повторной проверки. Почему здесь были следы MSE, если она не была установлена, и фактически не устанавливалась? Я не был уверен, но после размышлений в течение нескольких минут, я пришел к заключению, что ПО, которое моя мам использовала для переноса файлов и настроек с ее старой системы, скопировало части установки MSE, которая находилась в старой системе. Вероятно, она использовала какую-то OEM-утилиту, размещенную на ПК, хотя я рекомендую использовать для этого Windows Easy Transfer. Но на самом деле причина не имела значения в тот момент, нужно было просто успешно установить MSE, и я считал, что нашел неисправность. Я удалил все эти разделы реестра, перезапустил Setup и … столкнулся с той же ошибкой. Не готовый сдаться, я сделал еще одну трассировку установки. Подозревая, что setup прерывается на других фрагментах фантомной установки, я поискал «security essentials» в новом журнале трассировки и нашел еще ссылку до момента его падения. Чтобы избежать многократного повторения этой процедуры, я зашел в реестр и выполнил тот же поиск, уничтожив пару дюжин других разделов, в которых имелось упоминание о «security essentials». Я затаил дыхание и снова запустил установщик, но с тем же результатом:
Код ошибки был другой, так что очевидно я несколько продвинулся, но поиск в Интернете по-прежнему не давал никаких зацепок. Я сделал еще одну трассировку и начал двигаться по операциям. Установка проделала свой финт с перечислением установленных приложений, сгенерировав десятки тысяч операций. Я просматривал журнал назад от места запуска Wermgr.exe, но быстро утомился. Я по-прежнему не мог заметить, что стало причиной неудачи, и не мог предположить, как это должно выглядеть в трассировке. Мой шурин был настроен скептически, но я сказал ему, что не сдамся. Я был мотивирован проблемой, и тем фактом, что не мог позволить ему рассказать своим сотрудникам, о том, что он наблюдал мой провал. Я решил, что мне нужен журнал трассировки успешной установки, чтобы можно было определить, где начинаются расхождения. Если это единственный вариант, как в данном случае, пошаговое сравнение – очень мощный прием поиска неисправности. Я переключился на свой ноутбук, запустил виртуальную машину с Windows 7 и сгенерировал трассировку успешной установки MSE на чистой системе. Затем я скопировал журнал с маминого компьютера и открыл обе трассировки в разных окнах – одну наверху экрана, а другую внизу. Совместно пролистывая трассировки, я мог синхронизовать их просто по формам, оставляемым в окне путями операций, и время от времени удостоверялся, что они синхронизированы, более внимательно рассматривая операции. Хотя это довольно трудоемко, я двигался по журналу, иногда теряя синхронизацию, но затем восстанавливал ее. Один журнал был с чистой системы, а в другой было установлено множество ПО, что вызывало небольшие различия, которые я игнорировал. Наконец, спустя примерно 10 минут я нашел операцию, на которой были видны существенные различия: открытие раздела реестра HKCR\Installer\UpgradeCodesBB99F8B7FD53D4398442FBBAEF050F возвращало в качестве результата значение SUCCESS:
В то время как на работающей результат был NAME NOT FOUND:
Отличающийся кусок нарушенной установки, без какой-либо ссылки на MSE, поэтому он и не был обнаружен во время моих поисков реестре. Я уничтожил раздел, и с некоторой самоуверенностью заявил шурину, что решил проблему. Затем перекрестил пальцы и запустил установку снова, молясь чтобы всё сработало, и я смог бы вернуться к праздничному веселью, которое было внизу в полном разгаре. Есть, программа установки пыхтела несколько секунд и завершилась, поздравив меня с успешной интсалляцией:
Еще одна, казалось бы, неразрешимая проблема была побеждена с помощью Sysinternals, применением нескольких приемов поиска неисправностей и некоторого упорства. Мой шурин был весьма впечатлен, и у него появилась неплохая история, когда он вернется в офис после праздников, а моя мама получила более быстрый ПК со свободным антивирусным сервисом. Я сообщил об этом команде MSE и они работают над исправлением кодов ошибок и усовершенствованием программы установки, которое позволит ей стать более устойчивой к таким типам ошибок. Они также сообщили мне о дополнительных ресурсах на случай, если я столкнусь с подобными проблемами. Во-первых, это MscSupportTool.exe, извлекающий файлы журнала установки MSE, в которых может быть дополнительная информация. А также Microsoft ‘fix-it tool’, который исправляет некоторые проблемы установки. Я надеюсь, что ваши праздничные бдения над ПК прошли с подобным же успехом, и хочу пожелать, чтобы новый 2012 год был бы свободен от компьютерных проблем!