|
本帖最后由 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。
- 注意: 有关其他信息,请在事件日志中查找 [ActivityId] 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) [Add-AppxPackage], 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。
- 注意: 有关其他信息,请在事件日志中查找 [ActivityId] 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) [Add-AppxPackage], 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啊啊啊啊
只能继续研究解决办法了。
顺便问一下坛友们有思路吗?
|
|