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

 

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

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

clip_image002

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

Сначала я зашел в диалоговое окно «Установка и удаление программ» из «Панели управления», однако дважды щелкнув на записи Steam, я увидел диалоговое окно, просящее подтвердить удаление и предупреждающее, что при этом также удалится весь локальный контент. Я не хотел теряться все мои игровые настройки или все мои установленные игры, так что я отменил удаление. Большинство MSI-установщиков имеют опцию восстановления, которая повторно устанавливает приложение без удаления пользовательских данных или настроек, так что я зашел на домашнюю страничку Steam, скачал и запустил установщик Steam. Мастер установки предложил мне опцию восстановления:

clip_image004

Нажав кнопку Next, я увидел сообщение, которое сообщало о сетевой ошибке при попытке чтения локального файла:

clip_image006

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

clip_image008

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

clip_image010

То, что установщик пытался прочитать имя файла из существующего ключа реестра и расположение этого файла было в кэше Internet Explorer, навело меня на мысль, что он пытался запустить свою копию, которая выполнила начальную установку. Поскольку в первый раз я запускал установщик через IE напрямую с сайта Valve, и точно также я сделал и сейчас, папка загрузки была в кэше загрузки IE, однако с тех пор файл уже должен был быть удален.

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

clip_image012

Затем я вернулся к записи запроса реестра, щелкнул по ней правой кнопкой мыши, и выбрал из контекстного меню команду «Jump To». Process Monitor запустил Regedit и перешел непосредственно к ключу реестра, где я обновил значения LastUsedSource и PackageName, чтобы обозначить новую папку для загрузки:

clip_image014

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

clip_image016

Скрестив пальцы, я запустил Portal 2. Диалоговое окно Steam «Preparing to Launch» на секунду появилось, после чего на экран вышла игровая заставка Portal 2: дело закрыто. Удаление и последующая повторная установка Steam и всех игр, вероятно, привели бы к тому же результату, но Process Monitor сэкономил мне много времени и, возможно, мои игровые сохранения и настройки. Всего за несколько минут я вернулся к своей любимой игре-головоломке.

Обратите внимание на новую книгу Windows Sysinternals Administrator’s Reference, написанную мной и Аароном Маргозисом (Aaron Margosis), в которой вы найдете другие рекомендации по использованию более чем 70-ти инструментов Sysinternals для задач диагностики и управления вашими системами Windows!