Pull to refresh

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

Reading time4 min
Views51K
Приветствую.

Не знаю как вам, но мне сначала совершенно не хотелось ставить новую 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

Там же есть папка с готовым бинарником (скрипт + зависимости + 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

— UPD: Если у вас была ошибка с бинарником
/src/application.rb:76:in `require_relative': cannot load such file — /src/chain (LoadError)
скачайте новую версию с github, пофикшено.
Tags:
Hubs:
+36
Comments27

Articles