PilotSketch 发表于 2022-2-6 17:54:07

在Windows 10上安装安卓子系统的一些思路

本帖最后由 PencilNavigator 于 2022-2-19 01:04 编辑

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

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

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

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


(其实用包的大小能看出来,很明显头两个更大)

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

分析一下这个包里的文件,


可以看到,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>


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

402          错误 0x80080204: 从位置 AppxManifest.xml 中读取部件清单(manifest)失败,错误为: A
                                       ppx 包的清单无效。
                                       。
404          程序包的 AppX 部署操作失败,错误为 0x80080204。此失败的具体错误文本是: 错误 0x
                                       C00CE014: 应用部件清单(manifest)验证错误: 应用部件清单必须符合架构: 第 51 行,第
                                        14 列。注意: 已指定的 MaxVersionTested 架构无法识别带有命名空间“http://schemas
                                       .microsoft.com/appx/manifest/com/windows10/3”的 XML 字段。请确保指定正确的 MaxV
                                       ersionTested。原因: 根据父元素 '{http://schemas.microsoft.com/appx/manifest/com/
                                       windows10/2}ComServer' 的内容模型,元素 '{http://schemas.microsoft.com/appx/mani
                                       fest/com/windows10/3}ServiceServer' 为意外元素。
                                       要求: {http://schemas.microsoft.com/appx/manifest/com/windows10}ExeServer, {http
                                       ://schemas.microsoft.com/appx/manifest/com/windows10}SurrogateServer, {http://sc
                                       hemas.microsoft.com/appx/manifest/com/windows10}TreatAsClass, {http://schemas.mi
                                       crosoft.com/appx/manifest/com/windows10}ProgId。
报错日志说了跟没说一样,现在看网上安装成功的人说20H2安装成功概率会高,但是我不想更新20H2啊啊啊啊
只能继续研究解决办法了。
顺便问一下坛友们有思路吗?


龍在天涯 发表于 2022-2-6 17:57:43

楼主还是重新编辑一下帖子吧

PilotSketch 发表于 2022-2-6 18:13:27

龍在天涯 发表于 2022-2-6 17:57
楼主还是重新编辑一下帖子吧

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

xiaohu96 发表于 2022-2-6 21:38:24

学习了,感觉蛮复杂               

jyssysz 发表于 2022-2-7 11:31:38

PencilNavigator 发表于 2022-2-6 18:13
我点的保存草稿然后就发出来了。。。

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

841020672 发表于 2022-2-7 19:11:16

谢谢分享                  

PilotSketch 发表于 2022-2-19 01:05:47

本帖最后由 PencilNavigator 于 2022-2-19 21:46 编辑

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

jyssysz 发表于 2022-2-19 10:02:04

如果有成功的经验,可以参考一下。大部分情况下,有成功经验的人会把操作方法分享级大家的!
页: [1] 2
查看完整版本: 在Windows 10上安装安卓子系统的一些思路