четверг, 18 августа 2011 г.

Mark's Blog. Дело о зависшем запуске игры





« - Когда мне плохо, я работаю, - сказал он. - Когда у меня неприятности, когда у меня хандра, когда мне скучно жить, - я саж

усь работать. Наверное, существуют
другие рецепты, но я их не знаю. Или они мне не помогают. Хочешь моего совета - пожалуйста: садись работать. Слава богу, таким людям, как мы с тобой, для работы ничего не нужно кроме бумаги и карандаша...»

(А. и Б. Стругацкие, «За миллиард лет до конца све
та»).

Пусть этот эпиграф из Стругацких послужит привычным предисловием к переводу поста Марка Руссиновича. На этот раз Марк будет разбирать дело о зависшей игре. Приятного чтения, да не покинет Вас сила.

Дело о зависшем запуске игры

Конечно, мне очень нравится, когда приходят истории о том, как пользователи с помощью инструментов Sysinternals успешно разреш


ают сложные проблемы, но нет ничего приятнее, чем, используя все тот же инструментарий, решать свои собственные проблемы. В частности, этот случай оказался забавным, потому что его решение позволило мне вернуться к забавам.

Когда есть время, я время от времени играю в компьютерные игры, чтобы выпустить пар (вот такой вот каламбур - Mark). Несколько крайних лет моя любимая игрушка – Portal. Мне очень понравился первый Portal, затем я


заказал второй Portal от команды Valves, и, когда он стал доступен, я играл в него уже через несколько часов после выхода. С того времени я играю картах, которые создают любители игры. В прошлую субботу я засел за карту фаната, победителя с community map contest, но не хватило время, пройти ее за одни присест.

Следующим утром я перезагрузил свою машину, кликнул по ярлычку Portal 2, получив стандартный диалог запуска Steam. Обычно игра грузилась за пару секунд, но на этот раз диалог Steam остановился здесь:


Я закрыл этот Steam и открыл его снова, и снова диалог завис.

Я отрыл снимок активности Process Monitor’а и принялся искать в Process Explorer’е стек процессов Steam’а, но не обнаружил никаких ключей. Подумав, что конфигурация или установка Portal 2 повредилась, я удал игрушку, снова скачал ее и переустановил. Это не исправило проблемы, хотя Portal 2 был «чистым», что означало, что проблемы либо в Steam’е, либо еще в каком месте в Windows. Следующим шагом была переустановка Steam’а.


Первым делом я открыл «Удаление или изменение программ» из Панели управления, но двойной клик по Steam вызвал диалог, запрашивающий подтверждение удаления и предупреждающий, что удалится и весь контент. Не хотелось мне потерять настройки игры или же потом переустанавливать игры вообще, поэтому не стал я удалять Steam. У большинства установщиков Microsoft Installer Service (MSI – сервис установки Microsoft) есть опция «восстановить», она переустанавливает приложение без удаления данных пользователя или его конфигурации,

поэтому я зашел на домашнюю страничку Steam’а, скачал инстолятор и запустил его. Конечно же, мастер установки предложил мне опцию «восстановить» (repair option):

Нажав на кнопку «Далее» (Next button), я оказался ошарашен странным сообщением об ошибке. Появлялась сетевая ошибка! Это при попытке чтения файла, находящегося на жестком диске:

Я снова запустил Process Monitor и принялся отслеживать процессы при неудачной попытке восстановления программы. Сообщение об ошибке ссылалось на файл с именем SteamInstall[1].msi, так как я нашел в логе этого файла такую строку. Первой подсказкой оказалась значение, прочитанное в запросе ключа реестра HKCR\Installer\Products под названием PackageName

Следующая подсказка оказалась несколькими операциями позже, когда инстолятор пытался прочитать данные из файла и выводил их в сообщение об ошибке:

Инстолятр считывал имя файла с существующего ключа реестра, а место расположения файла оказался кэш Internet Explorer’а (IE’а). Сразу же возникло предположение, что инстолятор пытается запустить свою же копию со времен первого скачивания. Первоначальный файл установки запускался из папки IE с сайта Valve, точно так же, как это было сделано и сейчас, файл располагался в КЭШе IE’а, но с первой установки уже прошло время, и файл должен был бы давно удалиться.

Process Monitor показывал, что инстолятор обращается к первоначальному файлу установки, указанному в реестре, поэтому, укажи я установщику расположение только что скаченного файла, я бы смог его запустить, а не искать, где когда-то располагались старые файлы. Я просмотрел лог, ища, где располагается Steaminstall.msi, и нашел его в другом месте КЭШа:

Затем я вернулся к очереди входов реестра, кликнул правой кнопкой по нему, выбрал Jump To (перейти) из контекстного меню. Process Monitor запустил Regedit, открытый на нужном мне ключе, в котором я обновил значения LastUsedSource и PackageName на нужные мне:

После я закрыл диалог с ошибкой, который я оставлял открытым, и нажал на копку Далее (Next), пробуя исправить программу снова. На этот раз, Steam переустановился, и мастер выдал сообщение об успешной установке:


Я запустил Portal 2. на секунду вылетел диалог Steams’а «Preparing to Launch» (подготовка к запуску), и заставка Portal 2 появилась на экране. Дело распутано. Удаление и переустановка Steams’а и всех игр дали бы аналогичный результат, но Process Monitor дал возможность сэкономить время и сохранить все позиции и настройки игр. И спустя несколько минут, я вернулся к решению игровых задач разных видов.


Комментариев нет:

Отправить комментарий