Время на прочтение4 мин
Количество просмотров51K
Приветствую.
Не знаю как вам, но мне сначала совершенно не хотелось ставить новую 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, пофикшено.
Как использовать OAuth2 со Spring Security в Java
Javaican 14.05.2025
Протокол OAuth2 часто путают с механизмами аутентификации, хотя по сути это протокол авторизации. Представьте, что вместо передачи ключей от всего дома вашему другу, который пришёл полить цветы, вы. . .
Анализ текста на Python с NLTK и Spacy
AI_Generated 14.05.2025
NLTK, старожил в мире обработки естественного языка на Python, содержит богатейшую коллекцию алгоритмов и готовых моделей. Эта библиотека отлично подходит для образовательных целей и. . .
Реализация DI в PHP
Jason-Webb 13.05.2025
Когда я начинал писать свой первый крупный PHP-проект, моя архитектура напоминала запутаный клубок спагетти. Классы создавали другие классы внутри себя, зависимости жостко прописывались в коде, а о. . .
Обработка изображений в реальном времени на C# с OpenCV
stackOverflow 13.05.2025
Объединение библиотеки компьютерного зрения OpenCV с современным языком программирования C# создаёт симбиоз, который открывает доступ к впечатляющему набору возможностей. Ключевое преимущество этого. . .
POCO, ACE, Loki и другие продвинутые C++ библиотеки
NullReferenced 13.05.2025
В C++ разработки существует такое обилие библиотек, что порой кажется, будто ты заблудился в дремучем лесу. И среди этого многообразия POCO (Portable Components) – как маяк для тех, кто ищет. . .
Паттерны проектирования GoF на C#
UnmanagedCoder 13.05.2025
Вы наверняка сталкивались с ситуациями, когда код разрастается до неприличных размеров, а его поддержка становится настоящим испытанием. Именно в такие моменты на помощь приходят паттерны Gang of. . .
Создаем CLI приложение на Python с Prompt Toolkit
py-thonny 13.05.2025
Современные командные интерфейсы давно перестали быть черно-белыми текстовыми программами, которые многие помнят по старым операционным системам. CLI сегодня – это мощные, интуитивные и даже. . .
Конвейеры ETL с Apache Airflow и Python
AI_Generated 13.05.2025
ETL-конвейеры – это набор процессов, отвечающих за извлечение данных из различных источников (Extract), их преобразование в нужный формат (Transform) и загрузку в целевое хранилище (Load). . . .
Выполнение асинхронных задач в Python с asyncio
py-thonny 12.05.2025
Современный мир программирования похож на оживлённый мегаполис – тысячи процессов одновременно требуют внимания, ресурсов и времени. В этих джунглях операций возникают ситуации, когда программа. . .
Работа с gRPC сервисами на C#
UnmanagedCoder 12.05.2025
gRPC (Google Remote Procedure Call) — открытый высокопроизводительный RPC-фреймворк, изначально разработанный компанией Google. Он отличается от традиционых REST-сервисов как минимум тем, что. . .
-
mpack
- Site Moderator
- Posts: 39134
- Joined: 4. Sep 2008, 17:09
- Primary OS: MS Windows 10
- VBox Version: VirtualBox+Oracle ExtPack
- Guest OSses: Mostly XP
Re: Hyper-V in VirtualBox or other ways to run Windows Phone
Post
by mpack »
Hyper-V is the name of a product. Only Hyper-V supports Hyper-V.
OTOH hardware virtualization support is called VT-x (or AMV-v), and yes, VirtualBox supports it. No, no guest will see it whether or not it’s enabled (it’s a feature of the host) — and I’d have thought the same was true in VMWare.
-
Andrew Brehm
- Posts: 44
- Joined: 28. Mar 2012, 17:19
Re: Hyper-V in VirtualBox or other ways to run Windows Phone
Post
by Andrew Brehm »
mpack wrote:Hyper-V is the name of a product. Only Hyper-V supports Hyper-V.
OTOH hardware virtualization support is called VT-x (or AMV-v), and yes, VirtualBox supports it. No, no guest will see it whether or not it’s enabled (it’s a feature of the host) — and I’d have thought the same was true in VMWare.
I guess I wasn’t clear enough in my question. I wasn’t asking about VTx or AMD-v support in VirtualBox.
Hyper-V, incidentally, does not support Hyper-V. Only bare metal does, or so I thought, but apparently VMware does too (perhaps because of their binary translation feature).
Whether VirtualBox supports (i.e. runs on or requires) VT-x wasn’t the question. I was asking whether it is possible, somehow, to run Hyper-V within VirtualBox, since it is required for the Windows Phone SDK and since VMware supports such a configuration (unofficially).
I understand VirtualBox does some binary translation for real mode and ring compression but I am not sure about the extent and whether complete binary translation and hence support for Hyper-V (or other VT-x-using hypervisors) is possible at all. It never mattered to me before.
-
mpack
- Site Moderator
- Posts: 39134
- Joined: 4. Sep 2008, 17:09
- Primary OS: MS Windows 10
- VBox Version: VirtualBox+Oracle ExtPack
- Guest OSses: Mostly XP
Re: Hyper-V in VirtualBox or other ways to run Windows Phone
Post
by mpack »
AFAIK, there is no hardware feature called Hyper-V. Hyper-V is the name of a VM product, a bare metal hypervisor. The underlying hardware feature is called VT-x, and VirtualBox supports it. You cannot run a VirtualBox VM inside a Hyper-V VM.
I must say that the blog you’ve found does appear equally confused about terminology: the blurb shows VT-x being enabled, but I’m not sure why the author thought this equivalent to enabling Hyper-V.
-
Andrew Brehm
- Posts: 44
- Joined: 28. Mar 2012, 17:19
Re: Hyper-V in VirtualBox or other ways to run Windows Phone
Post
by Andrew Brehm »
mpack wrote:AFAIK, there is no hardware feature called Hyper-V. Hyper-V is the name of a VM product, a bare metal hypervisor. The underlying hardware feature is called VT-x, and VirtualBox supports it. You cannot run a VirtualBox VM inside a Hyper-V VM.
I must say that the blog you’ve found does appear equally confused about terminology: the blurb shows VT-x being enabled, but I’m not sure why the author thought this equivalent to enabling Hyper-V.
I really don’t know where you got the idea that by «Hyper-V» I was referring to a hardware feature.
The Nokia article I linked to doesn’t do that either.
There was also nothing about running a VirtualBox VM inside a Hyper-V VM either.
The article I linked to is not confused. It simply explains how to run Hyper-V in a VMware VM. Apparently using binary translation (I assume) VMware can virtualise VT-x. I wanted to know whether the same feat is possible in VirtualBox.
I didn’t refer to a hardware feature as Hyper-V, I didn’t talk about running a VirtualBox VM in a Hyper-V VM, I have no idea how you came up with any of those things.
-
Petr Vones
- Posts: 89
- Joined: 27. Dec 2012, 01:20
- Primary OS: MS Windows 10
- VBox Version: VirtualBox+Oracle ExtPack
- Guest OSses: Windows 10 64-bit
- Location: Czech Republic
Re: Hyper-V in VirtualBox or other ways to run Windows Phone
Post
by Petr Vones »
Actually there are more blocking issues. Microsoft states that «There are known compatability issues for XAML designer when running in Virtual Box, we don’t support this scenario.»
-
noteirak
- Site Moderator
- Posts: 5232
- Joined: 13. Jan 2012, 11:14
- Primary OS: Debian other
- VBox Version: OSE Debian
- Guest OSses: Debian, Win 2k8, Win 7
Re: Hyper-V in VirtualBox or other ways to run Windows Phone
Post
by noteirak »
What you are asking is : «Can I run into a Virtualisation product another Virtualisation product from another editor?»
There will always be only one answer : Not supported, never will be supported.
-
i686
- Posts: 1
- Joined: 13. Apr 2013, 08:03
Re: Hyper-V in VirtualBox or other ways to run Windows Phone
Post
by i686 »
Late post, but i thought it might be interesting for some people. (Maybe, maybe not, who knows…)
Anyway, nested virtualization has been supported in ESXi and VMWare workstation for a long time. Those are the only type1 and type2 (respectively) hypervisors i know of p.t. that supports this. For many sysadmins (me included) this is a vital feature that will allow us to test different scenarios without having to ask our bosses (at work or at home ) to spend anything from a few thousand to tens of thousands on hardware for creating a test platform for hypervisors. Those of you who have been working as sysadmins for some years know the need for having a good testing environment to test stuff before putting it into prod. So virtualized vt-x must and will come. I always used virtualbox, even after oracle bought it and am very happy with it, but i’m seriously considering switching to vmware and buy a license only because of this feature (must use workstation because i have to much ram… bummer… ).
And thats the way the cookie crumbles…
-
midix
- Posts: 5
- Joined: 8. Oct 2012, 14:32
Re: Hyper-V in VirtualBox or other ways to run Windows Phone
Post
by midix »
I have been running Windows Phone 8 emulator in VMWare Player without problems. Yes, it required manual editing of .vmx file, but is works reliably and without any problems at all.
I really miss this feature on VirtualBox because I find VMWare Player to be bloated and it slows the host system down much more than VirtualBox does.
Запуск Windows Phone на виртуальной машине Virtualbox
Содержание
- 1 Запуск Windows Phone на виртуальной машине Virtualbox
- 1.1 Где взять эмулятор Windows Phone?
- 1.2 Зачем запускать Windows Phone 8.1 на виртуалке?
- 1.3 Как установить Windows Phone на виртуальную машину
- 1.4 Управление Windows Phone на виртуальной машине
Для начала краткая вводная, предыстория, так сказать.
Поступил, значит, запрос от клиента «поднять» VPN. Да не простой, а такой, чтобы можно было подключаться с любых устройств и в первую очередь с мобильных. Особенно интересовал клиента Windows Phone, поскольку у него именно такой.
В мобильных устройствах есть нативные (т.е. «родные», встроенные в ОС) VPN-клиенты, но они поддерживают подключение к VPN IPsec, по протоколу IKEv2. Поэтому на linux-сервере клиента был настроен именно такой VPN, с помощью Strongswan. Настроили подключение из Android, IOS и с обычной десктопной Windows — все работает.
А клиент со своего виндофона подключиться не может, хоть застрелись. Неделю бились. А это же еще нужно тестировать, а виндофона, разумеется, нету ни у меня, ни у коллеги, с которым это всё поднимали. На тестирование приходится дёргать самого клиента. А это время, это неудобство для клиента. Стал искать возможность запустить эмулятор Windows Phone. Оказалось такая возможность имеется, но только под винду — есть эмулятор для разработчиков приложений под Windows Phone. А у меня Linux на рабочем ноутбуке.
Подумалось, что можно запустить виртуальную машину c Windows 10, например, а в ней этот эмулятор. Но это не сработало, ибо тулкит затребовал поддержки Hyper-V, которого конечно же на виртуальной машине не будет. Для этого нужно установить Windows на «железо» — что мне не подходит.
Поискал немного, обнаружил что можно запустить этот эмулятор без лишней ОС, сразу на виртуальной машине. Вот и делюсь с вами.
Идея проста. Нужно создать виртуальную машину и подключить к ней вместо диска уже готовый образ VHD (виртуального диска) с Windows Phone 8.1 на борту. Благо этот образ можно выдернуть из официального эмулятора WP 8.1 от Microsoft.
Зачем запускать Windows Phone 8.1 на виртуалке?
Ну если, например, как в моем случае — вы работаете из под Linux или MacOS. Или если вам нужно предоставить доступ к одной системе с виндофоном для нескольких разработчиков по сети. Или вам нужно еще какие-то извращения вроде, прости хоспаде, запуска бота на смартфоне с Виндовс… В общем, мало ли. Да и вообще, это наше trueЪ путь — запускать с как можно меньшими «костылями» коими в нашем случае по-умолчанию является сама по себе Windows.
Как установить Windows Phone на виртуальную машину
Итак, с теорией разобрались, пора приступать. Для начала понадобится установить Virtualbox.
Процесс наглядно показан вот в этом видео. Но тут кроме самой установки и запуска также показан процесс извлечения VHD из тулкита от MS.
Нам нужно создать машину с Windows 8.1 (32-bit). При выборе в списке ОС она может быть без указания битности.
Когда Virtualbox начнет спрашивать про диск — выбирайте вариант — существующий.
Далее выбираем тот самый файл, который был скачан по ссылке и распакован. В моем случае он был объемом около 1,8 Gb.
После создания заходим в настройки и выставляем 1 Gb оперативной памяти (можно было задать сразу) и 2 ядра процессора (CPU).
Теперь всё готово, запускаем и всё
Управление Windows Phone на виртуальной машине
При запуске на виртуалке включается клавиатура. Вот информация о маппинге клавиш для управления виндофоном с клавиатуры.
Активируется по pgUp или Pause/Break. Но ничего толкового с имеющимися клавишами сделать не удается. Нужно управлять пальцем.
А вот с этим большая проблема, если у вас не touch-устройство. Потому что запустить то её не проблема, но чем туда тыкать — это вопрос.
Потому как курсора мыши конечно же вы не увидите. Хотя мышь вполне себе работает, но управлять придётся «наощупь». А это очень сложно и долго. Как решить эту проблему я не разобрался. В итоге даже не смог протестировать то что собирался.
Весь мой прогресс — за час я добрался до настроек VPN и его включения.
Но как создать профиль или уж тем более подключиться — это я не осилил. Бросил баловство и переключился на другие задачи. Если знаете как решить этот вопрос — расскажите пожалуйста, буду