One of most remarkable events at 2012 was Windows roll-out: desktop Windows 8, tablet Windows RT and mobile Windows Phone 8 (here and after, WP8). Personally I'm a bit of Windows Phone evangelist and Windows Phone 8 launch, even delayed for few months, was a big interest for me, so I was eager to try it.
After WP8 SDK installation attempt, I learned that my Windows 7 workplace is obsolete. Almost no surprise here: if you need Win7 instead of old good WinXP to do WP7 development, why don't you need to upgrade your PC to Win8 before starting with WP8? Anyway, it was no reason (and no time, as usual) to re-settle my working environment from Win7 to Win8 just to try the new technology. The answer was stright-forward: let use virtual machine! So, the toolchain was obvious from the first glance: Win7 as a host, Win8 as a guest on virtual machine, then WP8 emulator to try the new SDK. After a long-enough time installing all the staff, the toolchain just failed on very last step. WP8 emulator been failed to launch, accompanied with incomprehensible error messages (very famous Microsoft-style, you can say).
Finally, if you're looking just for working solution, I can redirect you to one of proven ways to fix the problem: http://stackoverflow.com/questions/13148828/unable-to-create-the-virtual-machine. But if you're interested to take a deeper look, welcome to this note...
What did Shaman say?
Search engines do a big favor: they give us a recipe with lightning speed. So what's the problem, you can ask. The problem is: do you understand that recipe? Really understand in details, do you? This is why I did following research on Christmas days to understand why the StackOverflow topic does the trick. Getting started
So, to repeat the picture step-by-step, you'll need the following:
- VmWare Player 5, which is free for non-commercial use (you can use VmWare Workstation 9 if you have licenses bought)
- Windows 8 virtual machine - ask your admins to help you (you can spend a lot of time if bake it by yourself)
- WP8 SDK, as Web installer or full ISO (let me encourage you to do ISO download so you can mount it to virtual machines as a DVD drive then)
First possible pitfall is... your CPU! In short, you passed this step if you have Intel i3/i5/i7 processor as they all do Second Level Address Translation (SLAT) capability. Otherwise, you should check this brilliant wiki for extended description.
OK, let assume you have capable CPU. Let investigate in details what happens if you try to launch WP8 emulator then. Where is my virtualization, dude?
While you're trying to first-launch your WP8 hello-world project, the following popup appears:
Windows Phone Emulator |
You don't have permission to modify internal Hyper-V network adapter settings required to run the emulator |
Click "Retry" to run the emulator in elevated mode. |
[Retry] [Close] |
Clicking on [Retry] button, emulator window appears saying it launching the OS... and after a couple of minutes, "Generic failure" popup terminates that pity show.
To resolve this, let take a look at VmWare virtualization settings. You can edit virtual machine settings and make sure that "Processor" device has "Virtualize Intel VT-x/EPT or AMD-V/RVI" flag as ticked on. Alternatively, you can manually edit VMX file of your virtual machine image and set this option as true:
vhv.enable = "TRUE" |
Rumor has it. VmWare Workstation 9, the latest "mature" product of VmWare Inc will let WP8 emulator working as a charm if virtualization flag (see previous chapter) is on. In my case, I have only Player edition, but the same rumor (namely StackOverflow.com, see URL above) says you can manage non-official keys at VMX file, and following addendum will do the trick:
vhv.enable = "TRUE" hypervisor.cpuid.v0 = "FALSE" |
Windows Phone Emulator |
Do you want to configure the emulator to connect to the Internet? |
Your PC may lose its network connectivity while the changes are applied. This may affect any network operations in progress. |
[Yes] [No] |
Clicking [Yes] you will see very short delay and then, ta-da, your emulator is fully operational! Shaman said, set this to false. Shaman doesn't explain. Follow the word of Shaman, do you? Disobey the word
Feeling some contradiction sense, I tried to flip the non-documented settings to true, expecting the punishment from Heavens. But nothing has been changed! Finally I cropped the cpuid line to empty value:
vhv.enable = "TRUE" hypervisor.cpuid.v0 = "" |
Thanks to the same contradiction sense, I did the following tweak at VMX file:
vhv.enable = "FALSE" hypervisor.cpuid.v0 = "" |
Windows Phone Emulator |
Can't start the Windows Phone Emulator |
The Windows Phone Emulator requires Hyper-V. Your PC is missing the following pre-requisites required to run Hyper-V:
- Second Level Address Translation |
[Close] |
Note: Don't forget to re-enable virtualization support back to operational state! Other reasons to fail
To be fair, there are more ways to get WP8 emulator failed to run. Let me name two more (if you know another reason, just post a comment here, big thanks in advance):
- Insufficient CPU cores
- Not enough memory
Reason 1: WP8 as a platform intends at least two CPU cores available. So if you allocate single core for your virtual machine, emulator will fail with following message:
Windows Phone Emulator |
The Windows Phone Emulator wasn't able to ensure the virtual machine was running: Something happened while starting a virtual machine: 'Emulator WVGA 512MB.user' could not initialize. (Virtual machine ID XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) The processor topology specified for the virtual machine cannot be supported by this host. For instance, this can happen when the virtual processor or socket count for the virtual machine exceeds the logical processor or socket count for the host. |
[Close] |
Reason 2 : memory, RAM size. In old good days it was a useful habit to allocate not more than 1 gig of RAM to any virtual machine, otherwise your host OS may nearly die. For WP8 development, it's not true anymore. With 1Gb RAM limit, WP8 emulator will unable to get 512Mb of free RAM. Popup message is clear:
Windows Phone Emulator |
The Windows Phone Emulator wasn't able to ensure the virtual machine was running: Something happened while starting a virtual machine: 'Emulator WVGA 512MB.user' could not initialize. (Virtual machine ID XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) Not enough memory in the system to start the virtual machine Emulator WVGA 512MB.user with ram size 512 megabytes. (Virtual machine ID XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) |
[Close] |
Update 1: one more issue with Windows Phone 8 emulator is adderssed here: http://www.timmykokke.com/2013/01/windows-phone-emulator-hyper-v-error
Update 2: Comment from Hank User "I found that SLAT capabilities will not be properly detected, if the VMWare Tools are missing from the machine. You may want to consider that, if you try this at home."
RecapDespite the two-level virtuality (WP8 emulator is a Hyper-V virtual machine which launched on Win8 guest OS under VmWare running on Win7 host), the toolchain is stable and performs with almost no delays. This contradicts with my previous experience of double-virtualization while launching Meego on Qemu running at Linux guest at Windows host (terrible delays up to 20-30 seconds on each mouse movement).
So, everything is fine. The only requirements are:
- SLAT-capable CPU (any of Intel i-series, plus some others)
- virtualization enabled at BIOS level
- "non-documented" key hypervisor.cpuid.v0 = "" at VMX file
- virtual machine with enabled virtualization as vhv.enable = "TRUE"
- at least two CPU cores for the virtual machine
- at least 1.5Gb RAM for the virtual machine, 4Gb recommended (if you plan to launch any WP8 emulator), which naturally leads to 64-bit host OS, with at least 8Gb RAM onboard
Thanks for sharing this.
ReplyDeleteBut..
I have tried everything mentioned above and getting the same error stil...Could you please assist me...?
The Windows Phone Emulator wasn't ablt to create the virtual mchine:
Generic Failure
with "Invalid Pointer" build error.
I have Win8 VM (Player ) on my Windows 7 machine
Host machine
RAM 8GB
VM
RAM allocated :L 4GB
No. of Processor cores: 2
Set the following .vmx file
vhv.enable = "TRUE"
hypervisor.cpuid.v0 = ""
when i try to run the emulator EMULATOR WVGA 512MB (through sample sdkWEatherForcecastCS vs solution)
Couple of questions:
Delete1) What version of VmWare Player do you use?
2) Do you see the same error if shutdown the guest OS, close the Player and then re-launch them back?
3) Do you see the same error if creating standalone WP8 application via Visual Studio Wizard?
4) What is your CPU model?
5) In Win8, could you run Hyper-V Manager and try to create new virtual machine inside? (right pane -> Actions -> New -> Virtual Machine, then click Next sequentially with everything set to default)
Thanks, it totally worked for me ;3
ReplyDeleteThis comment has been removed by a blog administrator.
ReplyDeleteThis comment has been removed by a blog administrator.
ReplyDelete