无法创建虚拟机

39

我今天非常开心,终于成功安装了Windows Phone 8 SDK并试用了一下。我在虚拟机中(使用Parallels)安装了全新的Windows 8 Pro,并安装了Windows Phone 8 SDK。

一切都很顺利,Visual Studio Express已经安装并运行,但是当我创建了新项目并尝试部署时,VS出现了一个真的很奇怪的错误消息。

首先,弹出一个消息框通知“Windows Phone模拟器无法创建虚拟机:一般性故障”。真的很有信息量,非常专业 - 一般性错误,这真的很好。然后出现了关于部署失败的信息(非常感谢您对此保持通知,我没有注意到它完全崩溃了)。然后在错误列表中,出现了关于“无效指针”的信息 - 更好了。根本不清楚哪里出错或者问题出在哪里。

有人可以帮帮我吗?目前互联网上没有任何关于这个主题的信息,我不知道问题出在哪里。我扫描了Windows事件和日志,但什么也没有找到(可能是我没有正确搜索,请帮助我解决)。

有人能帮忙吗?


5
在VMWare中运行时我看到的是相同的事情。 - jarjar
2
Windows Phone 8 模拟器是一个独立的 Hyper-V 实例,因此在另一个虚拟机内运行它必然会导致问题。 - Claus Jørgensen
在 VMWare Fusion 中,我尝试了 "在虚拟机中启用 hypervisor 应用程序",但那也没有起作用。 - Vineet Bhatia
这里一样。我无法在 Windows 8 中的 VMWare 9.x 虚拟机中安装它... 有什么建议吗? - Mario Fraiß
1
我最初使用了VMWare,但最终在Parallels上开发Windows8和WP8,并在手机开发期间使用真实设备(Lumia 920)。偶尔我会在VMWare上使用模拟器...只是想补充一下信息,即在Parallels上使用WP8的真实设备没有任何问题。 - Michael Biermann
显示剩余5条评论
12个回答

26
Windows Phone 8 模拟器需要硬件 Hyper-V 支持。特别是,它需要支持二级地址转换、硬件辅助虚拟化和硬件 DEP 支持,并且不能在 hypervisor 中运行(不支持嵌套)。如果您在过去的 4 年内购买了计算机,则应该符合这些要求。您可以查看 this 文章以获取更多关于此的信息以及如何查找您的 PC 是否支持它。
由于这些硬件要求,这意味着您无法在大多数虚拟化技术中运行手机模拟器...但有一个例外:我一直在使用 VMWare 9,它似乎包含一个 "unsupported" 功能,允许 Hyper-V 正常工作。因此,您唯一的选择是购买 VMWare 9(或使用更高配置的 VMWare 8)或升级物理机到 Windows 8。
不支持的VMWare方式允许您在虚拟机中运行Hyper-V的方法是手动选项(hypervisor.cpuid.v0 =“FALSE”),它基本上告诉VMWare不向虚拟机报告它正在虚拟机中运行。 Hyper-V检查它是否在虚拟机中运行,如果是,则无法正常工作,因此这使得Hyper-V可以通过该检查工作。我个人已经测试了整个嵌套VM事情与电话模拟器(包括发布之前),除了速度相当慢之外,没有立即崩溃或其他什么问题。

VMWare Workstation 8也有解决方法,答案在下面。但是,9更容易配置,因此如果您拥有它,请使用此方法。


我尝试了所有的方法,但都没有成功。我安装了VMWare Fusion,在CPU设置中启用了VT-x/EPT,甚至修改了vmx文件添加了hypervisor.cpuid.v0 = “FALSE”指令,但是还是失败了,出现了同样的问题。CoreInfo告诉我我已经拥有了所需的一切,Hyper-V已安装,管理控制台可访问且没有任何投诉。但仍然无法正常工作。有人能够在纯净的(非发布候选版)Windows 8和发布的WP8 SDK上运行吗? - Martin Macak
2
我必须道歉。我终止了VmWare Fusion并在vmx文件中添加了指令(因为VM正在运行,所以已被覆盖)。重启后,WP8模拟器正在运行。因此,在最新的VMWare Fusion(版本5)下使用此解决方案是可能的。非常感谢。 - Martin Macak
我需要添加 vhv.enable = "true"。之后,我能够启用 Hyper-V 并启动模拟器...但是它崩溃了 :/ - boj
@boj 我不需要执行 vhc.enable。不过,我只是在使用 VMWare Workstation,而不是 VMWare Fusion。不确定是否有区别。 - Earlz
1
@Earlz 这是否意味着在我的 MacBook Pro 上运行 Parallels 上的 Visual Studio 调试应用程序是完全不可能的? - GR7
更新:请忽略我上一个问题/评论...您只需要在VM的优化设置中启用嵌套虚拟化,就可以运行模拟器了。 - GR7

7
我遇到了同样的问题,并通过启用此虚拟机中的 Hypervisor 应用程序并在 .vmx 文件中添加以下行来解决它:
hypervisor.cpuid.v0 = "FALSE"
这使得模拟器能够正常工作。 我在 这里 找到了这个答案。
希望这可以帮助您。

哦!我现在遇到了这个错误 http://shareourideas.com/wp-content/uploads/2012/10/Cant-start-the-Windows-Phone-Emulator.png - Naga Harish M
这个设置在VMWare Fusion 5中可行吗?http://communities.vmware.com/message/2094037?tstart=0 - Shazron
@NagaHarishMovva 我遇到了完全相同的问题。但我不记得我是如何解决的。你可以尝试进入Hyper-V管理器并查看一下。 - Earlz
我和我的一位同事交流过,这个答案(至少是链接的文章)应该适用于VMWare Workstation 8。但与9相比,这要麻烦得多。 - Earlz
关于我的评论——我在 VMWare Fusion 5 中添加了一行,在我的虚拟机设置中将其设置为 2 核(和 2048 MB RAM),在“处理器和内存”- >高级选项中,我勾选了“在此虚拟机中启用虚拟化应用程序”。它可以很好地运行 Windows Phone 8 模拟器,并且速度相当快。我的系统是在 15 英寸 Retina MacBook Pro 上的 OS X 10.8.2。请注意,RAM 的数量仅适用于 512MB WVGA 模拟器 - 如果您想运行其他模拟器,则需要将 RAM 提升到可能需要 4 GB。 - Shazron

5

实际上,它与VMware Fusion 5.0.1非常兼容。

我所要做的就是在虚拟机的.vmx文件中添加以下行:

hypervisor.cpuid.v0 =“FALSE” vhv.enable =“true”

保存并重新启动VMWARE(显然,在进行更改之前必须停止VM)

我现在正在使用Macbook中的VM内的emaulator调试来自VS2012的测试应用程序

我很开心

:-)


谢谢你的帮助!它正常工作了!只需要注意你的虚拟机需要不止一个处理器。在我的情况下,使用2个处理器的虚拟机完美地工作了 :-) - Arkan

2

2
我在 Parallels 论坛上发布了同样的问题。
回复:
这个模拟器实际上是一个虚拟机,所以我们正在讨论一个嵌套在虚拟机中的虚拟机,这需要支持嵌套 Hyper-V,据我所知,这是计划中但尚未实现的。如果你非常着急,VMware Fusion 已经支持此功能。
————-
请参阅 Parallels 论坛帖子:http://forum.parallels.com/showthread.php?p = 646448#post646448

1

作为https://dev59.com/5WYs5IYBdhLWcg3wGf_F#13163762(目前的最佳答案)的补充:

手动添加“hypervisor.cpuid.v0”键也适用于VmWare Player 5(主要原因是该软件可供非商业用途免费使用,因此如果您想试水,只需从VmWare网站下载并安装即可,它是完全功能的)。

稍微出乎意料的是,以下任何修改都可以解决WP8模拟器的问题:

hypervisor.cpuid.v0="FALSE"
hypervisor.cpuid.v0="TRUE"
hypervisor.cpuid.v0=""

是的,你可以为该键应用空值 - 但为什么呢?不知道为什么它能正常工作。我在我的博客中记录了一些笔记: http://windowsasusual.blogspot.ru/2013/01/how-to-launch-windows-phone-8-emulator.html


你的答案最好!在提供的链接中找到了一切使其工作的东西。 - Madman

1

1

您需要SLAT兼容的硬件才能运行Hyper-V,这是使用模拟器的要求。

您能否澄清一下您正在尝试运行的硬件类型,并且是否已在BIOS设置中启用了虚拟化?

"无效指针"错误只是意味着它无法连接到模拟器(和/或设备)。


1
我有SLAT兼容的硬件,并且BIOS中启用了虚拟化。仍然出现相同的错误。 - Igor Ralic
这里也是一样的,没有安装的机会。 - Mario Fraiß
我有SLAT兼容的硬件。这是来自核心信息的结果。Coreinfo v3.1-转储系统CPU和内存拓扑信息 版权所有(C)2008-2012 Mark Russinovich Sysinternals - www.sysinternals.com注意:必须在没有运行虚拟机监视器的系统上执行Coreinfo以获得准确的结果。Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz Intel64 Family 6 Model 42 Stepping 7, GenuineIntel HYPERVISOR * Hypervisor is present VMX - 支持英特尔硬件辅助虚拟化 EPT - 支持英特尔扩展页表(SLAT) - Martin Macak
哦,我现在明白了,原来我并没有。我误解了输出结果,认为当信息存在时,我自动拥有那个支持。谢谢。 - Martin Macak
@MartinMacak 你可能想看一下我的回答。VMWare 9有一个选项可以“隐藏”虚拟机在虚拟化程序中的存在。 - Earlz

0

对我来说,解决方案是添加以下行:

hypervisor.cpuid.v0 = "FALSE"

我使用VMware Player,并在.vmx文件中添加了一行代码(hypervisor.cpuid.v0 = "FALSE")。 我的Windows 8 Pro虚拟机完美地运行了Windows Phone 8的模拟器。


0

评论被接受的答案需要更多的声望,但是微软专门为Fusion提供了这里的说明。在Mac和VM重启几次后,它对我有用。我最初安装了不支持Hyper-V的W8.1,后来不得不安装它(在控制面板中的“打开或关闭Windows功能”),但除此之外没有问题。在2013年的16Gb MBP上相当快。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接