萝卜头IT论坛

搜索
查看: 7286|回复: 8
收起左侧

[经验分享] 在Windows 10上安装安卓子系统的一些思路

[复制链接]
发表于 2022-2-6 17:54:07 | 显示全部楼层 |阅读模式
本帖最后由 PencilNavigator 于 2022-2-19 01:04 编辑

众所周知,Windows Subsystem Android 安卓子系统(以下简称WSA)是只能安装在Windows11的。在Windows10上安装会出现无法解析的错误。但我在虚拟机中运行测试版windows11的时候,一不小心卡出了Windows10的任务栏(没错是真的卡出来了,截图我没有,但是图标是windows10的我保证)甚至任务栏底下的横杠都是和Windows10一样的,鬼畜的是点Windows徽标,开始栏还是从中间弹出来的。

(我甚至还在Windows10卡出了Windows7时代的窗口圆角边框。离谱)

所以,有没有一种可能,就是微软从Windows7开始的所有系统都是用的同一套底层?利用某些手段可以在Windows10中安装WSA?带着问题我开始了折腾。

如果直接用代码安装,powershell会报错
  1. PS C:\WINDOWS\system32> add-appxpackage "G:\Useful
  2. Apps\WSA\MicrosoftCorporationII.WindowsSubsystemForAndroid_1.7.32815.0_neutral___8wekyb3d8bbwe.Msixbundle"
  3. add-appxpackage : 部署失败,原因是 HRESULT: 0x80080204, Appx 包的清单无效。
  4. 错误 0xC00CE014: 应用部件清单(manifest)验证错误: 应用部件清单必须符合架构: 第 51 行,第 14 列。注意: 已指定的 MaxVersio
  5. nTested 架构无法识别带有命名空间“http://schemas.microsoft.com/appx/manifest/com/windows10/3”的 XML 字段。请确保指定正
  6. 确的 MaxVersionTested。原因: 根据父元素 '{http://schemas.microsoft.com/appx/manifest/com/windows10/2}ComServer' 的内容
  7. 模型,元素 '{http://schemas.microsoft.com/appx/manifest/com/windows10/3}ServiceServer' 为意外元素。
  8. 要求: {http://schemas.microsoft.com/appx/manifest/com/windows10}ExeServer, {http://schemas.microsoft.com/appx/manifest/
  9. com/windows10}Surrogat
  10. 错误 0xC00CE014: 应用部件清单(manifest)验证错误: 应用部件清单必须符合架构: 第 51 行,第 14 列。注意: 已指定的 MaxVersio
  11. nTested 架构无法识别带有命名空间“http://schemas.microsoft.com/appx/manifest/com/windows10/3”的 XML 字段。请确保指定正
  12. 确的 MaxVersionTested。原因: 根据父元素 '{http://schemas.microsoft.com/appx/manifest/com/windows10/2}ComServer' 的内容
  13. 模型,元素 '{http://schemas.microsoft.com/appx/manifest/com/windows10/3}ServiceServer' 为意外元素。
  14. 要求: {http://schemas.microsoft.com/appx/manifest/com/windows10}ExeServer, {http://schemas.microsoft.com/appx/manifest/
  15. com/windows10}SurrogateServer, {http://schemas.microsoft.com/appx/manifest/com/windows10}TreatAsClass, {http://schemas.
  16. microsoft.com/appx/manifest/com/windows10}ProgId。
  17. 注意: 有关其他信息,请在事件日志中查找 [ActivityId] 8dd6bab5-1930-0001-df67-d88d3019d801,或使用命令行 Get-AppPackageLo
  18. g -ActivityID 8dd6bab5-1930-0001-df67-d88d3019d801
  19. 所在位置 行:1 字符: 1
  20. + add-appxpackage "G:\Useful Apps\WSA\MicrosoftCorporationII.WindowsSub ...
  21. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  22.     + CategoryInfo          : NotSpecified: (G:\Useful Apps\...bbwe.Msixbundle:String) [Add-AppxPackage], Exception
  23.     + FullyQualifiedErrorId : DeploymentError,Microsoft.Windows.Appx.PackageManager.Commands.AddAppxPackageCommand
复制代码

那就先从安装包下手。

首先,分析一下WSA的安装包,后缀为.msixbundle,这说明这是多个安装包打包起来的一个“大安装包”。通过把后缀名改为.rar的方式可以用压缩软件看到bundle内的其他独立安装包。

打开后眼花缭乱,63个安装包(什么鬼),通过文件名判断大部分都是语言文件,真正有用的是两个(取决于你用的系统架构),他们是:WsaPackage_1.7.32815.0_x64_Release-Nightly.msix 和 WsaPackage_1.7.32815.0_ARM64_Release-Nightly.msix。我的cpu架构是X64,所以我需要的包是WsaPackage_1.7.32815.0_x64_Release-Nightly.msi

屏幕截图 2022-02-06 175530.png
(其实用包的大小能看出来,很明显头两个更大)

在找到需要的包后,再一次把后缀改为rar,提取里面的文件。

分析一下这个包里的文件,
屏幕截图 2022-02-06 175904.png

可以看到,WSA的包里大体与正常的UWP应用安装包大体无异。推测可能是由某个文件限制了指定版本的安装
通过万能的度娘,我们发现UWP应用安装包通常是用appmanifest来设定安装条件的


用Vs2019打开了这个文件,我在dependecies中找到了安装的条件。

<dependencies>
    <targetdevicefamily name="Windows.Desktop" minversion="10.0.22000.120" maxversiontested="10.0.22000.120">
    <packagedependency name="Microsoft.VCLibs.140.00.UWPDesktop" minversion="14.0.30035.0" publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US">
    <packagedependency name="Microsoft.UI.Xaml.2.6" minversion="2.62108.18004.0" publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US">
    <packagedependency name="Microsoft.VCLibs.140.00" minversion="14.0.30035.0" publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US">
</packagedependency></packagedependency></packagedependency></targetdevicefamily></dependencies>



可以看到,安装的条件有四个,一个是指定的版本号,另三个是依赖包包名。从本质来说,其实就是靠dependecies节点下的这个Windows.Desktop的这个最小版本10.0.22000.120来限制安装的,直接改成Win10的版本号即可。
以Windows 10 1909版的版本号为例(也就是我在用的版本),将最小版本设为10.0.18362.592。

(我猜测代码结构是 Windows大版本.Windows大版本修订Revision.内部os版本1.内部os版本2)

现在尝试用代码安装,但是安装时继续报错。这就很尴尬了,应该是manifest还有限制,只能继续折腾



(2022/2/19更新)
善用某度,找到了解决方案。事实证明我的思路是对的,manifest还有条件要改。
首先,在Capabilities这要删掉两行代码:

<Capabilities>
    <Capability Name="internetClient" />
    <rescap:Capability Name="runFullTrust" />
    <rescap:Capability Name="unvirtualizedResources" />
    <rescap:Capability Name="packagedServices" />
    <rescap:Capability Name="localSystemServices" />
    <rescap:Capability Name="packageManagement" />
    <rescap:Capability Name="packageQuery" />
    删除:<rescap:Capability Name="customInstallActions" />
    删除:<uap4:CustomCapability Name="Microsoft.classicAppInstaller_8wekyb3d8bbwe" />
</Capabilities>


然后在Extentions上删掉这几行代码:

<Extensions>
    删除<desktop6:Extension Category="windows.customInstall">
      删除<desktop6:CustomInstall Folder="CustomInstall" desktop8:RunAsUser="true">
        删除<desktop6:RepairActions>
          删除<desktop6:RepairAction File="WsaSetup.exe" Name="Repair" Arguments="repair" />
        删除</desktop6:RepairActions>
        删除<desktop6:UninstallActions>
          删除<desktop6:UninstallAction File="WsaSetup.exe" Name="Uninstall" Arguments="uninstall" />
        删除</desktop6:UninstallActions>
      删除</desktop6:CustomInstall>
    删除</desktop6:Extension>
    ...
</Extensions>


然后尝试执行上面的安装代码,进行安装。按照某度的说法,顺利的话就能看到子系统了。但是!我可能没有那么幸运。
安装再一次报错。
  1. add-appxpackage : 部署失败,原因是 HRESULT: 0x80080204, Appx 包的清单无效。
  2. 错误 0xC00CE014: 应用部件清单(manifest)验证错误: 应用部件清单必须符合架构: 第 51 行,第 14 列。注意: 已指定的 MaxVersio
  3. nTested 架构无法识别带有命名空间“http://schemas.microsoft.com/appx/manifest/com/windows10/3”的 XML 字段。请确保指定正
  4. 确的 MaxVersionTested。原因: 根据父元素 '{http://schemas.microsoft.com/appx/manifest/com/windows10/2}ComServer' 的内容
  5. 模型,元素 '{http://schemas.microsoft.com/appx/manifest/com/windows10/3}ServiceServer' 为意外元素。
  6. 要求: {http://schemas.microsoft.com/appx/manifest/com/windows10}ExeServer, {http://schemas.microsoft.com/appx/manifest/
  7. com/windows10}Surrogat
  8. 错误 0xC00CE014: 应用部件清单(manifest)验证错误: 应用部件清单必须符合架构: 第 51 行,第 14 列。注意: 已指定的 MaxVersio
  9. nTested 架构无法识别带有命名空间“http://schemas.microsoft.com/appx/manifest/com/windows10/3”的 XML 字段。请确保指定正
  10. 确的 MaxVersionTested。原因: 根据父元素 '{http://schemas.microsoft.com/appx/manifest/com/windows10/2}ComServer' 的内容
  11. 模型,元素 '{http://schemas.microsoft.com/appx/manifest/com/windows10/3}ServiceServer' 为意外元素。
  12. 要求: {http://schemas.microsoft.com/appx/manifest/com/windows10}ExeServer, {http://schemas.microsoft.com/appx/manifest/
  13. com/windows10}SurrogateServer, {http://schemas.microsoft.com/appx/manifest/com/windows10}TreatAsClass, {http://schemas.
  14. microsoft.com/appx/manifest/com/windows10}ProgId。
  15. 注意: 有关其他信息,请在事件日志中查找 [ActivityId] ae51a81b-2350-0002-e2bc-52ae5023d801,或使用命令行 Get-AppPackageLog -ActivityID ae51a81b-2350-0002-e2bc-52ae5023d801
  16. 所在位置 行:1 字符: 1
  17. + add-appxpackage  -register "G:\Useful Apps\WSA\WSAX64\AppxManifest.xm ...
  18. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  19.     + CategoryInfo          : NotSpecified: (G:\Useful Apps\...ppxManifest.xml:String) [Add-AppxPackage], Exception
  20.     + FullyQualifiedErrorId : DeploymentError,Microsoft.Windows.Appx.PackageManager.Commands.AddAppxPackageCommand
复制代码
查看事件日志:
  1. 603          已使用主参数 AppxManifest.xml 以及选项 DevelopmentModeOption 和 0 开始对程序包执
  2.                                        行部署 Register 操作。要获取有关诊断应用部署问题的帮助,请参阅 http://go.microso
  3.                                        ft.com/fwlink/?LinkId=235160。
  4. 135          错误 0xC00CE014: 应用部件清单(manifest)验证错误: 应用部件清单必须符合架构: 第 51
  5.                                         行,第 14 列。注意: 已指定的 MaxVersionTested 架构无法识别带有命名空间“http://
  6.                                        schemas.microsoft.com/appx/manifest/com/windows10/3”的 XML 字段。请确保指定正确
  7.                                        的 MaxVersionTested。原因: 根据父元素 '{http://schemas.microsoft.com/appx/manife
  8.                                        st/com/windows10/2}ComServer' 的内容模型,元素 '{http://schemas.microsoft.com/ap
  9.                                        px/manifest/com/windows10/3}ServiceServer' 为意外元素。
  10.                                        要求: {http://schemas.microsoft.com/appx/manifest/com/windows10}ExeServer, {http
  11.                                        ://schemas.microsoft.com/appx/manifest/com/windows10}SurrogateServer, {http://sc
  12.                                        hemas.microsoft.com/appx/manifest/com/windows10}TreatAsClass, {http://schemas.mi
  13.                                        crosoft.com/appx/manifest/com/windows10}ProgId。

  14. 402          错误 0x80080204: 从位置 AppxManifest.xml 中读取部件清单(manifest)失败,错误为: A
  15.                                        ppx 包的清单无效。
  16.                                        。
  17. 404          程序包  的 AppX 部署操作失败,错误为 0x80080204。此失败的具体错误文本是: 错误 0x
  18.                                        C00CE014: 应用部件清单(manifest)验证错误: 应用部件清单必须符合架构: 第 51 行,第
  19.                                         14 列。注意: 已指定的 MaxVersionTested 架构无法识别带有命名空间“http://schemas
  20.                                        .microsoft.com/appx/manifest/com/windows10/3”的 XML 字段。请确保指定正确的 MaxV
  21.                                        ersionTested。原因: 根据父元素 '{http://schemas.microsoft.com/appx/manifest/com/
  22.                                        windows10/2}ComServer' 的内容模型,元素 '{http://schemas.microsoft.com/appx/mani
  23.                                        fest/com/windows10/3}ServiceServer' 为意外元素。
  24.                                        要求: {http://schemas.microsoft.com/appx/manifest/com/windows10}ExeServer, {http
  25.                                        ://schemas.microsoft.com/appx/manifest/com/windows10}SurrogateServer, {http://sc
  26.                                        hemas.microsoft.com/appx/manifest/com/windows10}TreatAsClass, {http://schemas.mi
  27.                                        crosoft.com/appx/manifest/com/windows10}ProgId。
复制代码

报错日志说了跟没说一样,现在看网上安装成功的人说20H2安装成功概率会高,但是我不想更新20H2啊啊啊啊
只能继续研究解决办法了。
顺便问一下坛友们有思路吗?


回复

使用道具 举报

发表于 2022-2-6 17:57:43 来自手机 | 显示全部楼层
楼主还是重新编辑一下帖子吧
回复

使用道具 举报

 楼主| 发表于 2022-2-6 18:13:27 | 显示全部楼层
龍在天涯 发表于 2022-2-6 17:57
楼主还是重新编辑一下帖子吧

我点的保存草稿然后就发出来了。。。
回复

使用道具 举报

发表于 2022-2-6 21:38:24 | 显示全部楼层
学习了,感觉蛮复杂               
回复

使用道具 举报

发表于 2022-2-7 11:31:38 | 显示全部楼层
PencilNavigator 发表于 2022-2-6 18:13
我点的保存草稿然后就发出来了。。。

可以继续编辑的。
楼主继续研究!!!!
回复

使用道具 举报

发表于 2022-2-7 19:11:16 | 显示全部楼层
谢谢分享                    
回复

使用道具 举报

 楼主| 发表于 2022-2-19 01:05:47 | 显示全部楼层
本帖最后由 PencilNavigator 于 2022-2-19 21:46 编辑

原帖更新了,找到了某度上一些人成功安装的经验,但是我这还是不能安装,只能继续研究了。。。
回复

使用道具 举报

发表于 2022-2-19 10:02:04 | 显示全部楼层
如果有成功的经验,可以参考一下。大部分情况下,有成功经验的人会把操作方法分享级大家的!
回复

使用道具 举报

联系我们(Contact)|手机版|萝卜头IT论坛 ( 苏ICP备15050961号-1 )

GMT+8, 2024-4-19 09:08 , Processed in 0.107124 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表