На Хабре уже был пост о попытке установить Windows Phone 8 SDK на Windows 7, в котором автор произвёл собственное расследование и создал Ruby-скрипт, выполняющий по сути роль установщика компонентов WP8 SDK. В конечном итоге некоторый результат был получен, о чём можно прочитать в указанном посте — пересказывать не стану.
Ребята с форумов MSDN, однако, придумали другой, более хитрый план установки WP8 SDK на Windows 7. Ссылка на исходную тему на форумах MSDN — в конце поста, в «материалах», а дальше — подробное описание способа с картинками.
Хитрый план
Как подметил автор предыдущего поста на эту тему, установщик Windows Phone 8 SDK создан при помощи WiX, и при распаковке получается целая куча файлов, среди которых есть и BootstrapperApplicationData.xml. Автор нашёл в нём следующие строчки и в отчаянии от них отказался, а на самом деле этого делать не стоило:
<UxBlocker ShortName="CheckX64runningWin2008ServerOrWin8" Type="Stop" Condition="(VersionNT < v6.1) OR ((VersionNT = v6.1) AND (NTProductType < 3)) OR (NOT VersionNT64)" DisplayText="#loc.Win8X64Block" />
Именно эти строчки нам и мешают, и от них нам и предстоит избавиться. Так каков же план?
- Обзавестись дебаггером. В оригинальной теме на форумах MSDN ребята использовали OllyDbg.
- Прервать выполнение установщика на моменте, когда он уже распаковал BootstrapperApplicationData.xml, но ещё не начал его загружать.
- Удалить коварные строчки из BootstrapperApplicationData.xml и установить WP8 SDK в обычном режиме.
Исполнение
Скачиваем установщик WP8 SDK. Скачав архив с OllyDbg 1.10 и распаковав его в какую-нибудь папку, запускаем дебаггер. По команде File > Open открываем исполняемый файл установщика WPexpress_full.exe.
Видим список инструкций главного потока модуля ntdll (CPU — main thread, module ntdll). Нам нужен модуль WPexpress_full.exe, поэтому открываем список модулей (View > Executable modules) и выбираем его в списке. Теперь в списке инструкций нужно найти одну с оффсетом C3DF. В моём случае это 0107C3DF, но при каждом новом запуске первые два байта могут меняться. Базовый адрес можно подглядеть в списке модулей.
Отлично! Ставим на этой инструкции брейкпоинт: либо F2, либо в контекстном меню Breakpoint > Toggle. Дальше запускаем выполнение: F9 / синий треугольник на тулбаре / Debug > Run. Если в первый раз выполнение прервалось на другой инструкции, продолжаем его, снова нажав F9. Когда выполнение дойдёт до нужной инструкции, она характерно подсветится.
Следующим пунктом нашего хитрого плана будет непосредственно удаление вредной строчки из BootstrapperApplicationData.xml. Найти его не так уж трудно: в папке %temp% (\Users\<пользователь>\AppData\Local\Temp) во время работы установщика появится папка с названием в виде GUID’а в фигурных скобках, с символами в нижнем регистре. Внутри этой папки — ещё одна, с названием .ba#, где # — это номер попытки установки, начиная с 1. В этой папке будет нетрудно отыскать необходимый XML-файл, открыть его любым редактором и удалить нужную строчку:
Удалив строчку и сохранив файл, в OllyDbg продолжаем выполнение установщика. OllyDbg не закрываем, установку производим в штатном режиме при открытом дебаггере.
Результат
Конечно, этот вариант не без изъянов. Всё так же не устанавливается эмулятор Windows Phone 8 из-за отсутствия Hyper-V в Windows 7. В отличие от варианта, предложенного в посте, указанном в начале, при таком способе установке Blend и дизайнер Visual Studio оказываются полностью рабочими, т.е. разработать проект вполне можно и без проблем.
А вот протестировать проект для Windows Phone 8 у меня не удалось — помимо отсутствия эмулятора, у меня не было даже варианта запустить проект на устройстве. Кстати, с проектом для Windows Phone 7 — та же история! Что удивительно…
Почему — не знаю. То ли при таком способе установки WP8 SDK не устанавливает или не регистрирует какие-то важные компоненты, то ли дело в том, что я устанавливал просто VS2012 Express for Windows Phone (хотя сомневаюсь, что в этом проблема), то ли ещё дело в том, что ставилось это на многострадальную «семёрку», установленную около 3 лет назад и «очищенную» от всего, что до этого было в ней установлено, в том числе и от всех версий Visual Studio.
В общем, если кто-то сможет побороть эту проблему или же обнаружит, что это просто моя система уже так глючит, — получит практически полнофункциональный Windows Phone 8 SDK на Windows 7 (опять же, за исключением эмулятора WP8, который на моём Core 2 Quad, кстати, и на «восьмёрке» не работает). Если получится — пожалуйста, оставьте комментарий! Благодарю за внимание.
Материалы:
- Тема «Can Windows Phone 8 SDK be installed with Visual Studio 2012 on Windows 7?» на форумах MSDN.
ссылка на оригинал статьи http://habrahabr.ru/post/178169/
Добавить комментарий