相信很多开发者目前的系统还是Win7或Mac,一般不会为了开发某个程序而重装系统,所以我们就需要用到VMware这类的虚拟机来模拟预期的开发环境。在开始介绍前,给大家说明下我当前的软硬件环境,本文所讲的内容适用于此环境。
软件环境:Windows 7 旗舰版 (x64)、VMware Workstation 10,硬件环境:Xeon CPU E3 1230 (4核)。
简介
想要安装 Windows Phone SDK 8.0,64位处理器、4G 内存、Windows 8 64位操作系统(任意版本)是必须要满足的基本条件,开发完后可以使用在微软开发者中心注册过的 Windows Phone 8手机进行调试。如果想要使用 Windows Phone 模拟器直接调试,那么CPU还必须支持二级地址转换(SLAT,Second Level Address Translation)、操作系统必须是专业版或更高的版本。
准备环境
按照上面讲的要求进行自检。
同时检查是否支持SLAT
在微软官方下载Coreinfo(地址见文末)并解压,然后用管理员身份运行命令提示符(开始菜单->所有程序->附件->命令提示符->右键“以管理员身份运行”)。
并在命令提示符中输入 “Coreinfo安装路径\Coreinfo.exe -v”。intel的处理器,显示为EPT(Extended Page Tables)。AMD处理器,显示为NPT(Nested Page Tables)或RVI(Rapid Virtualization Indexing)。如果CPU支持SLAT,那么你会看见“EPT *”的字样,否则看到的是“EPT -”。
在VMware中新建虚拟机
使用自定义安装,除了个别的需要根据下面图片所示进行设置外,其余一路默认安装就可以了。
选择windows 8 x64系统
至少选择2个CPU
至少4G的内存
在启动虚拟机前,设置CPU的虚拟化引擎为 “Intel VT-x/EPT 或 AMD-V/RVI”,同时让CD/DVD指向Windows 8 专业版或更高版的iso文件。
安装Windows 8 x64 Pro
检查此系统的Hyper-V是否已经安装
使用“Win +X”快捷键呼出“程序和功能”面板,选择“启用或关闭 Windows 功能”,可以看见Hyper-V平台选项为灰色,鼠标移上去显示“无法安装Hyper-V, 某个虚拟机监控程序正在运行”。
我们先不去理会这个问题,直接进入下一步。
下载安装Windows Phone SDK 8.0
在官方下载页面下载SDK后安装,因为我下载的是iso版本,该版本貌似md5校验码有问题,所以在安装完后会提示“Visual C++ 2012 x64 Debug Runtime 无法找到元素”。不过不影响我开发Windows Phone App,也就没去细究。
提示Hyper-V已经启用
根据要求重启后,完成安装
安装成功,并提示Hyper-V也安装成功,我们再看一下系统的Hyper-V选项,发现已经全部安装好了。
运行Visual Studio
官网申请序列号
在运行Visual Studio Express 2012 For Windows Phone的时候,会要求输入序列号,这个只需要点击旁边的“在线注册”字样注册就可以收到带有序列号的邮件。
新建第一个Windows Phone 8 App
选择Windows Phone App项目模板
选择目标系统为Windows Phone OS 8.0
选择模拟器(Emulator WVGA 512M),点击运行
使用Windows Phone模拟器运行,提示“The Windows Phone Emulator wasn‘t able to create the virtual machine. Generic failure”。
下面将通过修改vmx文件来解决这个问题。
修改vmx文件
vmx是VMware的配置文件。先关闭当前的虚拟机,然后进入刚创建的虚拟机所对应的目录,找到“.vmx”结尾的文件,使用记事本或其它编辑器工具打开,在文件末加入下列语句:
vmx文件
hypervisor.cpuid.v0 = "FALSE"
mce.enable = "TRUE"
Hyper-V会检查当前是否运行在虚拟机里,只有当不是的时候才会正常运行。hypervisor.cpuid.v0 = "FALSE" 这句话就是为了绕过这个检查。
保存后,重新打开虚拟机。这次运行项目时,会提示“Do you want to configure the emulator to connect to the Internet?”,意思就是网络连接丢失,我们选择“Yes”,让模拟器配置网络连接。
现在你已经可以正常运行Windows Phone 模拟器了。Cheers!
这个过程有点长,耐心等待一会儿
这就是刚刚创建的应用
回过头来,看一下网络连接面板,会发现多了些奇怪的连接。这些就是Hyper-V创建的虚拟交换机连接。
如果禁用了其中的 vEthernet(Internal Ethernet Port Windows Phone Emulator Internal),就会导致运行模拟器时提示“The emulator couldn‘t determin the host IP address, which is used to communicate with the guest virtual machine”。因此,该连接对于运行模拟器来说是必须的。
其它问题
如果发些自己还是启动不了模拟器,请检查下自己的Hyper-V交换机是否已经建立。交换机配置中至少包含“Windows Phone Emulator Internal Switch”这个交换机。
Hyper-V 管理器
正常的Hyper-V 管理器
正常的虚拟交换机管理器
如果没有找到这个虚拟交换机,也不用心急。通过“新建虚拟网络交换机”这个选项,输入“Windows Phone Emulator Internal Switch”,选择“内部”就可以自己建立一个了,效果是一样的。
快速问答
1. 为什么要x64位?
因为Hyper-V只能在64位处理器下工作
2. 为什么要支持SLAT?
因为Hyper-V需要用到它来提高虚拟地址和物理地址转换的效率。
3. 为什么要使用Hyper-V?
因为Windows Phone 8 模拟器需要运行在Hyper-V上。
4. 什么是Hype-V?
Windows 8 的虚拟化技术。
参考资源
Windows SDK 8.0 下载地址,ISO地址可在该页面内找到
如何为 Windows Phone 模拟器启用 Hyper-V