Попытка установить Windows Phone 8 SDK в Windows 7

от автора

Приветствую.

Не знаю как вам, но мне сначала совершенно не хотелось ставить новую Windows 8. А смысл? Смысла не было, семёрка отлично работала и продолжила бы работу, но… Умные люди из Microsoft любят всё переделывать заново и в этот раз они конкретно переборщили.

Дело в том, что новая версия эмулятора WP, Windows Phone Emulator (XDE), использует технологию Hyper-V, которая в семействе настольных Windows появилась только начиная с Windows 8.

У меня возникла идея любой ценой установить этот SDK себе в VS2012 под Windows 7 и выжать из него максимум возможностей.

Внимание!

  • Эмулятор будет доступен только для WP 7.1 и ниже;
  • Blend будет доступен только для WP 7.1 и ниже, а значит XAML под WP 8 придётся писать руками;
  • Это just for fun, ведь нормальные герои всегда идут в обход!

Под катом я вкратце расскажу, как устроен установщик WP8 SDK и покажу кривой путь через болотце для тех, кто не хочет расставаться с Windows 7, но хочет продложить разработку под новые версии Windows Phone.

Копаемся в пакете

Загрузив с официального сайта установщик WPexpress_full.exe, я попробовал его запустить. Он меня послал, сказав что я должен переустановить винду (вот не ожидал!) на что-нибудь поновее, например Windows 8. От такой дерзости я опешил и недолго думая обновил ту самую картинку с собакой, на всякий случай, чтобы было чем отмахиваться в идеологических спорах с друзьями.

Всё подозрение пало на маркетологов.

WPexpress_full.exe отлично распаковывается с помощью WinRAR, внутри обнаружились следующие файлы:

0: XML document text u0: PE32 executable for MS Windows (DLL) (GUI) Intel 80386 32-bit u1: PE32 executable for MS Windows (DLL) (console) Intel 80386 32-bit Mono/.Net assembly u10: PE32 executable for MS Windows (DLL) (GUI) Intel 80386 32-bit u11: PE32 executable for MS Windows (DLL) (GUI) Intel 80386 32-bit u12: XML  document text u13: XML  document text u14: exported SGML document text u15: UTF-8 Unicode (with BOM) text, with very long lines, with CRLF line terminators u16: PNG image data, 63 x 63, 8-bit/color RGBA, non-interlaced u17: HTML document text u18: XML document text u2: XML document text u3: exported SGML document text u4: XML document text u5: MS Windows icon resource - 3 icons, 16x16, 16-colors u6: MS Windows icon resource - 3 icons, 16x16, 16-colors u7: MS Windows icon resource - 3 icons, 16x16, 16-colors u8: PE32 executable for MS Windows (DLL) (console) Intel 80386 32-bit Mono/.Net assembly u9: XML  document text 

После изучения файла 0, который являлся заголовочным для этого пакета, выяснилось, что инсталлятор сделан с помощью тулкита Windows Installer XML (WiX) toolset. Выкачал инструменты этого WiX, среди них была утилита dark.exe, отвечающая за распаковку .msi пакетов, собранных дефолтным инструментарием WiX. Утилита подошла и к этому пакету.

Он распаковался:

. ├── AdminDeployment.xsd ├── BootstrapperApplicationData.xml ├── BootstrapperCore.config ├── BootstrapperCore.dll ├── HighContrastThemes.xaml ├── License.htm ├── LocalizableStrings.xml ├── ManagedUx.dll ├── SkuResources.xaml ├── Themes.xaml ├── manifest.xml ├── mbahost.dll ├── mbapreq.dll ├── mbapreq.png ├── mbapreq.thm ├── mbapreq.wxl ├── res │   ├── info.ico │   ├── stop.ico │   └── warn.ico └── sqmapi.dll 

После прочтения доков и осмотра XML файлов стало ясно, что установщик делался с кастомным интерфейсом, с использованием ManagedUx и Bootstrapper (Burn) из WiX SDK (в архиве wix36-sources.zip есть пример такого проекта — WixBA).

Проще говоря, то что у нас есть — без воссоздания WiX проекта в Visual Studio пересобрать обратно в установщик нельзя. Как минимум manifest.xml является

<BurnManifest xmlns="http://schemas.microsoft.com/wix/2008/Burn"> 

и как собирать такие манифесты — ни одна утилита из стандартного набора 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"/> 

которую можно удалить, такой способ придётся оставить.

Парсим manifest.xml

В manifest.xml прописаны все пакеты, которые устанавливаются установщиком, а так же URI источников. Я написал ruby-скрипт, который парсит и скачивает всё необходимое, затем поочерёдно устанавливает.
Порядок установки пакетов такой же, как они следуют в XML манифесте, надеюсь это не важно.

Исходные тексты на GitHub

Там же есть папка bin/ с готовым бинарником (скрипт + зависимости + ruby 1.9.3, собрано с помощью ocra), нужно просто перетянуть на него WPexpress_full.exe и наблюдать.

Готовый к употреблению архив в ZIP

Tips & Tricks

Редактор XAML будет пытаться запустить Blend, тот в свою очередь — компонент эмулятора WP8, отчего сам же Blend будет вечно падать. Я сразу переключил редактор XAML на тот что без визуальщины, автокомплит там работает и ладно.

В сухом остатке имеем:

  • Полноценный рабочий SDK для Windows Phone 7.1
  • Нерабочий эмулятор Windows Phone 8
  • Нерабочий редактор интерфейсов Blend для WP 8
  • Неполноценный, но таки рабочий (!) SDK для WP 8

Факт: Windows Phone 8 запускается в VirtualBox на той же Windows 7, но нет курсора мышки и сети, так что пока ничего полезного это не дало.

Желаю удачи с этим делом! ~ Xlab

ссылка на оригинал статьи http://habrahabr.ru/post/157427/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *