Попытка установить 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

Там же есть папка с готовым бинарником (скрипт + зависимости + 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, пофикшено.
Поделиться публикацией

Похожие публикации

Комментарии 27

    +1
    Установилось — это хорошо. Собрать что-нибудь получилось?
      +1
      Конечно, SDK рабочий же — собирается .xap, все дела…
      Можно деплоить.
      0
      Интересно, а отлаживать на вп8 устройстве можно? Проверил бы, если бы не перешёл на 8ку уже.
        0
        Я не заметил препятствий, пункт меню выбора target есть, но девайса у меня пока нет :( Буду рад если кто протестит чтоб наверняка.
        0
        Программерского шила в маркетинговом мешке не утаишь: порадовал второй Id «Window_MetroMinSDK»
          0
          да они конечно круто сделали: мало того, что нужен Win8 так еще и процессор не ниже i3. Это конечно вообще бомба, столько геморроя добавили. Интересно старые проекты (под wp7.5) нормально будут собираться?
            0
            Я старался в посте этот момент осветить, но как-то незаметно вышло на фоне болота.
            Проекты под старые версии Windows Phone работают как обычно — и дизайнер работает и эмулятор, никаких отклонений не заметил. Я имею ввиду SDK 7.1, который установился вместе с SDK 8.0
          • НЛО прилетело и опубликовало эту надпись здесь
              +1
              Не уверен наверняка, но раз на Build рассказывали о том, что приложения для Win8 и WP8 должны иметь общее ядро, а в примерах на плюсах везде был C++/CX, то кажется, что все-таки второе.
                0
                cl.ly/Kcqw

                Вот скриншот стека WinRT с презентации.
                В WP8 есть возможность писать на C++
              0
              От MS такого не ожидал — компания славится своей длительной поддержкой ПО.
              А вот Apple постоянно так делает с XCode.
                0
                Только сам тулчейн там opensource, поэтому никто не мешает самые свежие версии через macports просто собирать, если припрет.
                  0
                  И как меня спасет тулчейн, когда мне нужен XCode, а не его небольшой кусок?
                    0
                    И что сейчас мешает самый свежий xcode иметь на mountain lion? А iOS sdk там отдельно качаются.
                    Опять же, чтобы компилировать приложения даже под iOS весь xcode и не нужен.
                      0
                      А я хочу на Snow Leopard, допустим.
                      Которая вышла практически одновременно с Windows 7.
                      Подскажите, как.

                      > Опять же, чтобы компилировать приложения даже под iOS весь xcode и не нужен.
                      А разрабатывать? Нужен.
                        0
                        Все-таки у Apple апгрейд дешевле и xcode таки бесплатно распространяется, причем полнофункциональный. В случае винды можно бесплатно или урезанную VC Express получить или Windows SDK, в котором вроде как возможности полные, но это только сборочная ферма без студии.
                        А разрабатывать можно и в TextMate'е на худой конец, а отлаживать на девайсе.
                0
                Если так не нравится восьмёрка — поставить Windows Server 2008 R2, в нём включить фичу Hyper-V. Всяко времени бы ушло меньше чем на эти танцы с бубном.
                  0
                  А потом оказалось бы, что SDK на сервере не работает, потому что там не та версия Hyper-V, или вообще камень не поддерживает SLAT.

                  Это уже не говоря о цене на серверную ось.
                    0
                    Серверная ОСь для студентов бесплатна, в образовательных целях.
                    0
                    Все танцы с бубном были сделаны до того, как я узнал о необходимости Hyper-V.
                    Инсталлятор просто просил поставить Windows 8, я думал маркетинговый буллшит и можно обойтись малой кровью.

                    Windows 8 я поставил и вроде как смирился, просто материал про танцы с бубном было жалко :)
                    0
                    Скачал zip, запустил установщик. После закачки всех компонентов получил следующую ошибку:


                    140/140 packages\WPT\nuget11_VPDExpress.cab
                    Installation has been started
                    C:/Users/truf/AppData/Local/Temp/ocrB0DA.tmp/src/application.rb:76:in `requi
                    re_relative': cannot load such file — C:/Users/truf/AppData/Local/Temp/ocrB
                    0DA.tmp/src/chain (LoadError)
                    from C:/Users/truf/AppData/Local/Temp/ocrB0DA.tmp/src/application.rb
                    :76:in `main'
                    from C:/Users/truf/AppData/Local/Temp/ocrB0DA.tmp/src/application.rb
                    :83:in `'

                    C:\Users\truf\Downloads\wp8sdk-installer-master\wp8sdk-installer-master\bin>
                      +1
                      Оу, спасибо за багрепорт. Походу chain.rb не закатался в .exe. Попробуйте положить рядом с .exe файлом файл chain.rb из исходников, он подгрузится динамически. Обновлю вечером
                        0
                        Попробовал еще раз. Теперь дело дошло до инсталляции и я посмотрел на первые пакетов 15. Но в дюжине из них получал следующие message box:

                        После чего прибил выполнение скрипта насильно.
                          +1
                          Эти пакеты особой роли не играют, у меня те же варнинги. По идее их лучшее исключить из chain.rb, мне было лень.
                          Всего таких варнингов было штук 10.
                          Проверил на чистой Win7 Professional + VS2012 Professional + скрипт из ZIP.
                            0
                            Хм. А можно сделать версию, которая бы не качала пакет заново, если он уже скачан. Очень не хочется в третий раз 2 часа перекачивать все 140 пакетов. Я попробовал положить в bin\ скрипты, закомментировать строки
                            #FileUtils.rm_rf 'packages'
                            #download_payloads (payloads)
                            в application.rb. Но он не стартовал из cmd:

                            C:\Users\truf\Downloads\wp8sdk-installer-master\wp8sdk-installer-master\bin> ruby application.rb
                            C:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require':
                            cannot load such file — nokogiri (LoadError)
                            from C:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:i
                            n `require'
                            from application.rb:7:in `'
                              0
                              gem install nokogiri
                              зависимости :)
                                0
                                Помогло. Запустился с параметром
                                ruby application.rb WPexpress_full.exe

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                    Самое читаемое