除了 Surface Pro 系列和 Surface Laptop 3,去年 10 月的 微软新产品发布会 还发布了两款引人注目的双屏设备:Surface Duo 与 Surface Neo。其中 Surface Duo 为搭载 Android 双屏操作系统 Surface「手机」1.早些时候,微软已经发布了预览版 SDK 以及模拟机系统,少数派也做了相关介绍。
另一种折叠屏设备 Surface Neo 搭载一个以 Windows Core OS 全新的核心操作系统 Windows 10X。就在最近,微软也发布了 Microsoft Emulator 适用于模拟器 Windows 10X 开发者使用和开发相关软件的镜像。
与模拟机系统不同的是,Windows 10X 镜像可以像普通人一样 Windows 10 除了镜像安装在实体机上, Surface Go,甚至有人在 MacBook 上 成功安装。经过一天的辗转反侧踩了一天的坑),我终于把它拿走了 Windows 10X 成功安装在自己的设备上,写下踩坑的记录供想折腾的朋友参考。
运行 Windows 10X 的 MacBook | 图:The Verge
注意:安装 Windows 10X 有一定的基础知识和动手能力,有一定的风险。
前期准备若要借助现有的 Windows 将计算机(宿主机)安装到另一台设备(目标机) Windows 10X,两台设备需要分别满足以下条件。
宿主机:
安装了 Hyper-V 的 Windows10 系统(推荐 21H1,理论上19H一个版本也可以,但没有实测) 32GB 左右的 USB 存储设备(已安装) PE 并存在系统 EFI 也可以使用分区)目标机:
支持 Hyper-V 的 CPU有 DCH 驱动显卡(可用 Microsoft Store 里的 Intel 或显卡控制中心 NVIDIA 主板有控制面板) UEFI 固件(关闭安全启动 Secure Boot)一个大于 128GB 的 SSD(理论似乎不需要 128G 也可以但未实测)当然,宿主机和目标也可以是同一台电脑,以确保满足条件。但是,不建议在您的主要设备上安装 Windows 10X,毕竟尝起来很有风险。
但是,不建议在您的主要设备上安装 Windows 10X,毕竟尝起来很有风险。最好的办法还是找一个不用但符合要求的「目标机」条件设备。安装步骤Step 1:获取镜像
借助 这个网站 我们可以在微软商店下载任何东西 appx 我们在这里把安装包 Windows 10X 模拟器镜像 粘贴链接并下载 appx。用 7zip 打开刚下载的 appx 包,在content可以在文件夹中看到 Flash.vhdx,这就是我们需要的镜像。将其解压到所需路径。本文使用
D:\\WCOS为例。Step 2:挂载镜像
首先,我们通过 PowerShell 从商店下载的镜像挂载:Mount-VHD "D:\\WCOS\\Flash.vhdx"
然后检查是否有正确的挂载:Get-StoragePool -FriendlyName OSPool
若显示以下内容为挂载成功:FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly Size AllocatedSize------------ ----------------- ------------ ------------ ---------- ---- -------------OSPool OK Healthy False False 127.9 GB 21.81 GB
安装镜像,我们还需要使用它 diskpart 挂载镜像分配卷标:diskpartlis vol#选择标签 MainOS 的卷sel vol 15#分配闲置盘符(例如M)assign letter=M
Step 3:添加驱动
为了保证 Windows 10X 在我们需要的设备上正常运行,我们还需要添加一些必要的驱动文件。以显卡驱动为例:刚刚挂载的 MainOS 复制以下文件
D:\\WCOS\\Tools,包括:
M:\\Windows\\Servicing目录中的UpdateApp.exeCbsApi.dllCbsMsg.dll
M:\\Windows\\System32目录中的
CbsCore.dllDrvServicing.dllIUSpaces.dllIUSpaces_vb.dll (复制 IUSpaces.dll 副本并重命名)UpdateAPI.dllcimfs.dllcmiadapter.dllcmiaisupport.dllcmintegrator.dlldpx.dlldrvstore.dllmsdelta.dllmspatcha.dllmspatchc.dllturbostack.dllwcp.dllwdscore.dll上述文件已打包上传 OneDrive。
然后我们作为管理员运作 PowerShell 并定位至 Tools 文件夹(cd D:\\WCOS\\Tools),测试 UpdateApp.exe 正常工作:.\\UpdateApp.exe getinstalledpackages
如果工作正常,将显示以下内容:UpdateApp - Update Application for Windows Mobile[00:00:00]Loaded servicing stack from X:\\wcos\ ools with session name IUPackageInfoSession_EFIESP[00:00:00]External storage staging directory is: (null)[00:00:00]Closing session IUPackageInfoSession_EFIESP[00:00:00]Loaded servicing stack from X:\\wcos\ ools with session name IUPackageInfoSession_MainOS[00:00:00]External storage staging directory is: (null)[00:00:01]Closing session IUPackageInfoSession_MainOS164 packages: Microsoft-OneCore-HyperV-Guest-UpdateOS-Package~31bf3856ad364e35~amd64~en-US~10.0.19563.1000, UpdateOS Microsoft-OneCore-HyperV-Guest-UpdateOS-Package~31bf3856ad364e35~amd64~~10.0.19563.1000, UpdateOS Microsoft-OneCore-ServicingStack-UpdateOS-Package~31bf3856ad364e35~amd64~~10.0.19563.1000, updateos[...]getinstalledpackages completed successfullycommand took 6 seconds
用 Dism 导出 Intel 显卡驱动到D:\\WCOS\\Drivers\\Graphics\\Intel中(Dism 存储文件将创建子文件夹,移动到上层文件夹)
D:\\WCOS\\Drivers\\Graphics\\Intel应该有一个 iigd.inf 打开它写下文件 Provider 和 DriverVer 的值,例如,我的是:比如我的是:Provider=%Intel%DriverVer=09/25/2019,26.20.100.7262
Provider 它提供了一个变量值,inf 内搜可得:Intel = “Intel Corporation”
然后用我们刚刚得到的。 UpdateApp.exe 为 Windows 10X 安装驱动到 bsp 分区:.\\UpdateApp.exe install "DriverPackage|D:\\WCOS\\DHCUDrivers\\Graphics\\iigd_dch.inf|Intel_Corporation-iigd_dch.inf~amd64~26.20.100.7262~bsp|0"
这里需要特别注意的是:
如果双引号内容中有空格,请用下划线 _ 不得出现在所有空格文件名中 - ,请修改文件名的某些驱动程序 Provider 比如 DW1820A 网卡的 Provider 的值为 BROADCOM, NTamd64.6.1,保留 BROADCOM 即可。
推荐安装的驱动程序包括网卡、显卡和蓝牙。请考虑添加其他驱动程序。看到 install complete successfully 提示保证安装成功,如果不成功,请检查上上内容 Provider 和 DriverVer 的值
安装驱动后,使用管理员 PowerShell 下列命令卸载镜像:Dismount-VHD "D:\\WCOS\\Flash.vhdx"
Step 四、制作启动盘准备以下文件和文件夹
D:\\WCOS\\Boot准备制作启动盘从Windows 10 19559 AMD64 或更高版本在镜像中获取boot 文件夹、EFI 文件夹、sources\\boot.wim文件和bootmgr.efi 文件从 GPT fdisk 下载 gdisk64.exe从 dd for windows 官网 下载 Windows 版本的 ddrelease64.exe从 GitHub 下载EFI Shell,重命名为 bootx64.efi,然后移动到efi\\boot中,并将efi\\boot中 原有的 bootx64.efi 重命名为 winx64.efi新建一个 startup.nsh 文件,内容为:
dmpstore -d SecureBootPlatformID fs0:\\efi\\boot\\winx64.efi fs1:\\efi\\boot\\winx64.efi fs2:\\efi\\boot\\winx64.efi fs3:\\efi\\boot\\winx64.efi fs4:\\efi\\b
oot\winx64.efi fs5:\efi\boot\winx64.efi fs6:\efi\boot\winx64.efi fs7:\efi\boot\winx64.efi fs8:\efi\boot\winx64.efi fs9:\efi\boot\winx64.efi fsA:\efi\boot\winx64.efi
这个脚本会从 nvram 中删除 SecureBootPlatformID 这个变量。因为 Windows 10X 会重新在 nvram 中写入安全启动的相关变量。然后连接 USB 存储设备(这里我们制作的是 U 盘启动盘),管理员运行 PowerShell 执行 diskpart(
请确保在以下步骤中选择正确的硬盘,否则您将丢失您的数据):lis dis#列出所有硬盘,然后选择 USB 存储设备,我这里是磁盘1sel dis 1#清除硬盘clean#转换成 gpt 格式convert gpt#创建一个 5000MB 的 FAT32 分区作为引导分区,并分配空盘符 Ycreate part pri size=5000format fs=fat32 quickassign letter=Y#剩余空间创建为 exFAT 分区作为存储分区,并分配空盘符 Zcreate part priformat fs=exfat quickassign letter=Z
以上面的分区为例,我们需要把 Step 4 开头准备的文件和文件夹拷贝到 Y 盘中,Flash.vhdx 拷贝到 Z 盘中。
于是你获得了一个启动U盘了,它的目录结构如下:Y:.│ startup.nsh│ ddrelease64.exe│ gdisk64.exe│├─sources│ boot.wim│├─boot│ │ bcd│ │ boot.sdi│ │ bootfix.bin│ │ bootsect.exe│ │ etfsboot.com│ │ memtest.exe│ ││ ├─en-us│ │ bootsect.exe.mui│ ││ ├─fonts│ │ chs_boot.ttf│ │ cht_boot.ttf│ │ jpn_boot.ttf│ │ kor_boot.ttf│ │ [···]│ ││ └─resources│ bootres.dll│└─efi ├─boot │ winx64.efi │ bootx64.efi │ └─microsoft └─boot │ bcd │ cdboot.efi │ cdboot_noprompt.efi │ efisys.bin │ efisys_noprompt.bin │ memtest.efi │ winsipolicy.p7b │ ├─fonts │ chs_boot.ttf │ cht_boot.ttf │ jpn_boot.ttf │ kor_boot.ttf │ [···] │ └─resources bootres.dllZ:. Flash.vhdx
Step 4:如何安装在目标主机上
从 USB 存储设备启动。开机时疯狂按 Esc 中断 startup.nsh 的执行,在 EFI Shell 中 输入以下命令备份 nvram:dmpstore -all -s fs0:#此处的 fs0 可以自由选择分区的,可以通过 fs<number>: 命令切换不同分区,并借助 ls 命令查看硬盘里的目录得知是什么硬盘的什么分区
然后输入 exit 再次重启电脑,这次不中断 startup.nsh 执行放任它自己启动即可进入 Windows 10X 安装环境,按键盘 Shift+F10 启动 cmd(或者和我一样进入自己的 Windows PE 系统运行 cmd),通过以下命令确定刚刚我们准备的工具和 Flash.vhdx 的所在分区(即上面提到的 Y 和 Z 分区,如果是 Windows PE 系统中可以直接打开文件管理器查看文件在哪)。C:dirD:dirE:dir[···]
例如我的启动引导分区为 E,我的 Flash.vhdx 在 F 分区中,用 diskpart 挂载它:diskpart#启动 diskpartsel vdisk file="F:\Flash.vhdx"#选择 Flash.vhdx 文件attach vdisk readonly#挂载虚拟磁盘为只读lis dis #确认是否挂载成功,如果有看到超过物理磁盘的数量则挂载成功
根据启动 cmd 的环境,分为两种情况(我这里为情况 2):
1. 如果是在 Windows 安装环境启动命令行的,则会看到一个 2048MB 的已联机的磁盘,把它的编号然后减去 1 ,然后记下来,比如: 磁盘 ### 状态 大小 可用 Dyn Gpt -------- ------------- ------- ------- --- --- 磁盘 4 联机 2048 MB 2048 MB *
则记下为磁盘 3。
2. 如果在 Windows PE 系统中会看到一个 128G 的已联机的磁盘,因为这个 vhdx 是 128G 的动态扩展虚拟磁盘文件,记下磁盘编号,比如我的是磁盘 23. 在 diskpart 中选中要安装的磁盘并抹除
:sel dis 0#如上图我要安装的硬盘为磁盘 0,选中它clean#抹除convert mbr#转换为 mbr,和大佬讨论之后认为目的是彻底地破坏 gpt 分区结构exit#退出 diskpart
然后把 Windows 10X 镜像数据写入到物理硬盘中:E:\ddrelease64.exe if=\\.\physicaldrive2 of=\\.\physicaldrive0 bs=8M --progress
注意:该命令中的 physicaldrive2 和 physicaldrive0 是根据我自己的实际情况(磁盘 2)编写的,请读者自行替换。即将 2 替换为刚刚记下来的挂载的 vhdx 虚拟磁盘的磁盘号;将 0 替换为要安装系统的磁盘号,笔记本单硬盘的状况下一把就是 physicaldrive0 了。
例如,情况 1 中的例子是磁盘 3,此处则应该将 physicaldrive2 替换成 physicaldrive3 ,下文中所用的磁盘号均使用我实际情况中的磁盘号,即 0 和 2,也请读者自行同步替换。
另外,一定要加上 --progress 这个参数,不然会等得很着急。去休息一下,等待它达到 131072M 即可,出现错误 27 直接无视,已经写入成功了。接着我们运行以下命令:E:\gdisk64.exe -l \\.\physicaldrive2
出现如下结果然后拍照截图记下来:[···]Number Start (sector) End (sector) Size Code Name 1 512 8703 32.0 MiB EF00 BS_EFIESP 2 8704 33554426 128.0 GiB 4202 OSPool
然后手动重建 gpt 分区,运行以下命令(基本照搬即可):E:\gdisk64.exe \\.\physicaldrive0#接受任何警告xzE:\gdisk64.exe \\.\physicaldrive0#接受任何警告n1409669624EF00n2696322684354084202c1BS_EFIESPc2OSPoolp#检查与刚刚记下来的数字分区等有没有对应w#确认执行即可
如何恢复启动原来的系统
如果你在一台本身安装了 Windows 10 的设备上安装 Windows 10X,Windows 10X 会在 nvram 中写入安全启动相关的信息,导致正常的 Windows 10 系统无法启动,这时候需要进入 EFI Shell 删除刚刚启动盘中的 startup.nsh 文件,方法如下。
从 U 盘启动进入 EFI Shell, 执行以下命令:dmpstore -d -all
以上命令会清除 nvram ,可能会导致键盘大写灯无法亮起或者其他未知问题。重启选择正常 Windows 所在的硬盘启动,应该就可以正常启动原来正常的 Windows 10 系统了。
如果无法启动,可以尝试再次清除 nvram,步骤同上;如果出现键盘大写灯无法亮起或者其他未知问题,可以通过 EFI Shell 尝试恢复我们上面备份的 nvram:dmpstore -all -l fs0:VarDump.txt