AppInstaller XML 问题
AppInstaller XML Issue
我正在尝试遵循 Microsoft 文档
但我对为什么我的应用程序安装程序失败感到困惑:
<?xml version="1.0" encoding="utf-8"?>
<AppInstaller xmlns="http://schemas.microsoft.com/appx/appinstaller/2018" Uri="https://xxxxxx.blob.core.windows.net/installer/Package.appinstaller" Version="1.0.0.0">
<MainPackage Name="MyApp" Version="12.21.289.0" Publisher="CN=xxxxxx" ProcessorArchitecture="x64" Uri="https://xxxxxx.blob.core.windows.net/installer/MyApp.msix"/>
<UpdateSettings> <OnLaunch HoursBetweenUpdateChecks="1" /> <AutomaticBackgroundTask/> </UpdateSettings>
</AppInstaller>
如果我 运行 MSIX 文件,它会按预期安装。
我一直在努力遵循这个:
https://docs.microsoft.com/en-us/windows/msix/desktop/azure-dev-ops
我收到此错误:
如果我删除 UpdateSettings 属性,它只会导致另一个错误:
“应用程序安装失败,错误消息:Appinstaller 操作失败,错误代码为 0x80D05011。详细信息:未知错误 (0x80d05011)”
请帮忙。
如果这对任何人有帮助,我发现了这个帖子:
https://techcommunity.microsoft.com/t5/msix-deployment/windows-10-2004-msix-not-updating-please-check-whether-the/m-p/1466701
基本上答案是重启你的机器。我这样做了,它似乎已经修复了它
as @The-pademelon 也提到重启交付优化服务也有效。
这是 windows 交付优化服务中的一个错误,我们目前所能做的就是解决方法。
开发者:
这个问题是由于版本号的一部分改变了它的位数,比如从 1.0.9.9 到 1.0.10.0,如果你让构建过程自动增加这些数字,这会很快发生。解决方法是 滚动到下一个版本 (1.1.0.0)。解决这个问题的最好方法可能是始终从 0.100.100 或 0.1000.1000 的基本版本开始,否则您将严重限制可用的总版本号。
用户:
任务管理器 -> 服务 -> DoSvc -> 重启
这比重启系统要快一些,也方便一些。
注意:服务的中断状态是由这个版本编号错误引起的,但一旦发生,重启是纠正它的唯一方法。
添加@user3190036 的答案:我设法构建和安装的最大版本号是 65535.65535.65535.9
似乎第 4 个范围是错误所在,因为它不符合作为错误消息的一部分出现的架构,如果您使用这样的任意大数字:
MakeAppx : error: Error info: error C00CE169: App manifest validation error: The app manifest must be valid as per schema: Line 7, Column 33, Reason: '1.0.125500.9' violates pattern constraint of
'(0|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])(\.(0|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])){3}'.
The attribute 'Version' with value '1.0.125500.9' failed to parse.
将正则表达式解构为
(0
|[1-9][0-9]{0,3}
|[1-5][0-9]{4}
|6[0-4][0-9]{3}
|65[0-4][0-9]{2}
|655[0-2][0-9]
|6553[0-5])
(\.
(0
|[1-9][0-9]{0,3}
|[1-5][0-9]{4}|6[0-4][0-9]{3}
|65[0-4][0-9]{2}
|655[0-2][0-9]
|6553[0-5])
){3}
我们可以更清楚地看到取值的可能范围:0..65535对于4个部分中的任何一个,但是由于存在错误,第4个部分被限制为单个数字0..9.
对我有用的最小版本号是 0.0.0.0
。
2021 年 5 月 5 日在最新的 Win Server 2019 上测试
好吧,经过三天无望的调试和多次尝试寻找这个问题的根源,我们终于弄明白了。 解决方法见下文。
传递优化服务错误地缓存了它检索到的任何 HTTP 资源的大小(它可以是应用安装程序文件或 MSIX 包),并在 Range
HTTP header具有可能过时的字节范围值的后续请求。
例如,如果您的应用程序安装程序长 725 字节,第一次 Windows DO 服务发出 well-formed HTTP 请求并下载整个 XML。请求示例:
GET https://foobar.com/baz.appinstaller HTTP/1.1
Connection: Keep-Alive
Accept: */*
Range: bytes=0-724
User-Agent: Microsoft-Delivery-Optimization/10.0
MS-CV: ......
Content-Length: 0
Host: foobar.com
但是如果您更新了您的网络服务器上的应用程序安装程序文件,并且它的大小增加了,例如,最多 4096 字节,DoSvc 仍然请求仅前 725 个字节 ,显然会损坏 XML,无法解析。即使 ETag
处理正确并且已针对 appinstaller HTTP 资源进行了更改!
如果您的应用程序安装程序文件大小 减小 ,您可能会得到 416 Range Not Satisfiable.
这是我们使用 Fiddler 转储的来自 Amazon S3(我们托管应用程序安装程序和 MSIX 程序包的地方)的真实响应:
HTTP/1.1 206 Partial Content
x-amz-id-2: ...
x-amz-request-id: ...
Date: Tue, 06 Apr 2021 21:45:12 GMT
Last-Modified: Tue, 06 Apr 2021 21:40:24 GMT
ETag: "af2d8bb5c638eca059cdb4dc6c694123"
Accept-Ranges: bytes
Content-Range: bytes 0-724/4096
Content-Type: application/appinstaller
Content-Length: 725
Server: AmazonS3
<?xml version="1.0" encoding="utf-8"?>
<AppInstaller
Uri="https://tvd-packages.tradingview.com/beta/latest/win32/TradingView.appinstaller"
Version="1.0.0.1071"
xmlns="http://schemas.microsoft.com/appx/appinstaller/2017/2">
<MainPackage
Name="TradingView.Desktop"
Version="1.0.0.1071"
Publisher="CN="TradingView, Inc.", O="TradingView, Inc.", STREET=470 Olde Worthington Road Suite 200, L=Westerville, S=Ohio, PostalCode=43082, C=US"
ProcessorArchitecture="x64"
Uri="https://tvd-packages.tradingview.com/beta/1.0.0-beta.1.5/win32/x64/TradingView.msix" />
<UpdateSettings>
<OnLaunch HoursBetweenUpdateChecks="0" />
</UpdateSettings>
<!--
- WHAT TH
你注意到 Content-Range: bytes 0-724/4096
并且评论被切断了吗??这是传递优化服务 ill-formed HTTP 范围请求的结果。
解决方法:您已经猜到了吗?是的,只是不要改变应用程序安装程序的大小!例如,我们用 XML 注释填充它,正好达到 4096 字节,如果我们需要向 XML 添加更多有意义的内容,我们只需从 XML 注释中删除一些字符即可又是 4096 字节。我们甚至在我们的 gitlab 部署管道中做了一个简单的大小测试,以确保 appinstaller 的大小没有被意外更改。
您可以查看我们自 2021 年 4 月以来使用的当前生产应用程序安装程序:https://tvd-packages.tradingview.com/stable/latest/win32/TradingView.appinstaller
P.S. 如果对同一个 URL 执行请求,问题就会出现。如果 URL 发生变化,DoSvc HTTP 客户端逻辑会将其作为不同的资源进行处理。这就是为什么 appinstaller 文件更有可能成为这个问题的受害者。
我正在尝试遵循 Microsoft 文档 但我对为什么我的应用程序安装程序失败感到困惑:
<?xml version="1.0" encoding="utf-8"?>
<AppInstaller xmlns="http://schemas.microsoft.com/appx/appinstaller/2018" Uri="https://xxxxxx.blob.core.windows.net/installer/Package.appinstaller" Version="1.0.0.0">
<MainPackage Name="MyApp" Version="12.21.289.0" Publisher="CN=xxxxxx" ProcessorArchitecture="x64" Uri="https://xxxxxx.blob.core.windows.net/installer/MyApp.msix"/>
<UpdateSettings> <OnLaunch HoursBetweenUpdateChecks="1" /> <AutomaticBackgroundTask/> </UpdateSettings>
</AppInstaller>
如果我 运行 MSIX 文件,它会按预期安装。
我一直在努力遵循这个:
https://docs.microsoft.com/en-us/windows/msix/desktop/azure-dev-ops
我收到此错误:
请帮忙。
如果这对任何人有帮助,我发现了这个帖子: https://techcommunity.microsoft.com/t5/msix-deployment/windows-10-2004-msix-not-updating-please-check-whether-the/m-p/1466701
基本上答案是重启你的机器。我这样做了,它似乎已经修复了它
as @The-pademelon 也提到重启交付优化服务也有效。
这是 windows 交付优化服务中的一个错误,我们目前所能做的就是解决方法。
开发者: 这个问题是由于版本号的一部分改变了它的位数,比如从 1.0.9.9 到 1.0.10.0,如果你让构建过程自动增加这些数字,这会很快发生。解决方法是 滚动到下一个版本 (1.1.0.0)。解决这个问题的最好方法可能是始终从 0.100.100 或 0.1000.1000 的基本版本开始,否则您将严重限制可用的总版本号。
用户: 任务管理器 -> 服务 -> DoSvc -> 重启 这比重启系统要快一些,也方便一些。
注意:服务的中断状态是由这个版本编号错误引起的,但一旦发生,重启是纠正它的唯一方法。
添加@user3190036 的答案:我设法构建和安装的最大版本号是 65535.65535.65535.9
似乎第 4 个范围是错误所在,因为它不符合作为错误消息的一部分出现的架构,如果您使用这样的任意大数字:
MakeAppx : error: Error info: error C00CE169: App manifest validation error: The app manifest must be valid as per schema: Line 7, Column 33, Reason: '1.0.125500.9' violates pattern constraint of
'(0|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])(\.(0|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])){3}'.
The attribute 'Version' with value '1.0.125500.9' failed to parse.
将正则表达式解构为
(0
|[1-9][0-9]{0,3}
|[1-5][0-9]{4}
|6[0-4][0-9]{3}
|65[0-4][0-9]{2}
|655[0-2][0-9]
|6553[0-5])
(\.
(0
|[1-9][0-9]{0,3}
|[1-5][0-9]{4}|6[0-4][0-9]{3}
|65[0-4][0-9]{2}
|655[0-2][0-9]
|6553[0-5])
){3}
我们可以更清楚地看到取值的可能范围:0..65535对于4个部分中的任何一个,但是由于存在错误,第4个部分被限制为单个数字0..9.
对我有用的最小版本号是 0.0.0.0
。
2021 年 5 月 5 日在最新的 Win Server 2019 上测试
好吧,经过三天无望的调试和多次尝试寻找这个问题的根源,我们终于弄明白了。 解决方法见下文。
传递优化服务错误地缓存了它检索到的任何 HTTP 资源的大小(它可以是应用安装程序文件或 MSIX 包),并在 Range
HTTP header具有可能过时的字节范围值的后续请求。
例如,如果您的应用程序安装程序长 725 字节,第一次 Windows DO 服务发出 well-formed HTTP 请求并下载整个 XML。请求示例:
GET https://foobar.com/baz.appinstaller HTTP/1.1
Connection: Keep-Alive
Accept: */*
Range: bytes=0-724
User-Agent: Microsoft-Delivery-Optimization/10.0
MS-CV: ......
Content-Length: 0
Host: foobar.com
但是如果您更新了您的网络服务器上的应用程序安装程序文件,并且它的大小增加了,例如,最多 4096 字节,DoSvc 仍然请求仅前 725 个字节 ,显然会损坏 XML,无法解析。即使 ETag
处理正确并且已针对 appinstaller HTTP 资源进行了更改!
如果您的应用程序安装程序文件大小 减小 ,您可能会得到 416 Range Not Satisfiable.
这是我们使用 Fiddler 转储的来自 Amazon S3(我们托管应用程序安装程序和 MSIX 程序包的地方)的真实响应:
HTTP/1.1 206 Partial Content
x-amz-id-2: ...
x-amz-request-id: ...
Date: Tue, 06 Apr 2021 21:45:12 GMT
Last-Modified: Tue, 06 Apr 2021 21:40:24 GMT
ETag: "af2d8bb5c638eca059cdb4dc6c694123"
Accept-Ranges: bytes
Content-Range: bytes 0-724/4096
Content-Type: application/appinstaller
Content-Length: 725
Server: AmazonS3
<?xml version="1.0" encoding="utf-8"?>
<AppInstaller
Uri="https://tvd-packages.tradingview.com/beta/latest/win32/TradingView.appinstaller"
Version="1.0.0.1071"
xmlns="http://schemas.microsoft.com/appx/appinstaller/2017/2">
<MainPackage
Name="TradingView.Desktop"
Version="1.0.0.1071"
Publisher="CN="TradingView, Inc.", O="TradingView, Inc.", STREET=470 Olde Worthington Road Suite 200, L=Westerville, S=Ohio, PostalCode=43082, C=US"
ProcessorArchitecture="x64"
Uri="https://tvd-packages.tradingview.com/beta/1.0.0-beta.1.5/win32/x64/TradingView.msix" />
<UpdateSettings>
<OnLaunch HoursBetweenUpdateChecks="0" />
</UpdateSettings>
<!--
- WHAT TH
你注意到 Content-Range: bytes 0-724/4096
并且评论被切断了吗??这是传递优化服务 ill-formed HTTP 范围请求的结果。
解决方法:您已经猜到了吗?是的,只是不要改变应用程序安装程序的大小!例如,我们用 XML 注释填充它,正好达到 4096 字节,如果我们需要向 XML 添加更多有意义的内容,我们只需从 XML 注释中删除一些字符即可又是 4096 字节。我们甚至在我们的 gitlab 部署管道中做了一个简单的大小测试,以确保 appinstaller 的大小没有被意外更改。
您可以查看我们自 2021 年 4 月以来使用的当前生产应用程序安装程序:https://tvd-packages.tradingview.com/stable/latest/win32/TradingView.appinstaller
P.S. 如果对同一个 URL 执行请求,问题就会出现。如果 URL 发生变化,DoSvc HTTP 客户端逻辑会将其作为不同的资源进行处理。这就是为什么 appinstaller 文件更有可能成为这个问题的受害者。