7

我正在尝试遵循 Microsoft 文档,但我对我的 appinstaller 失败的原因感到困惑:

<?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)”

请帮忙。

4

4 回答 4

8

如果这对任何人都有帮助,我发现了这个线程: https ://techcommunity.microsoft.com/t5/msix-deployment/windows-10-2004-msix-not-updating-please-check-whether-the/mp/1466701

基本上答案是重启你的机器。我做了,它似乎已经修复了它

正如@The-pademelon 还提到重新启动传递优化服务也有效。 在此处输入图像描述

于 2020-10-20T00:34:08.130 回答
8

好吧,经过三天无望的调试和多次尝试找到这个问题的根源,我们终于弄明白了。有关解决方法,请参见下文。

传递优化服务错误地缓存了它检索到的任何 HTTP 资源的大小(它可以是 appinstaller 文件或 MSIX 包),并Range在后续请求中包含 HTTP 标头以及可能过期的字节范围值。

例如,如果您的应用程序安装程序的长度为 725 字节,则 Windows DO 服务第一次发出格式正确的 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

但是,如果您在 Web 服务器上更新了 appinstaller 文件,并且它的大小增加了,例如增加到 4096 字节,DoSvc仍然只请求前 725 字节,并且显然会得到一个无法解析的损坏的 XML。即使ETag已正确处理并已针对 appinstaller HTTP 资源进行了更改!

如果您的 appinstaller 文件大小减小,您可能会得到416 Range Not Satisfiable

以下是我们使用 Fiddler 转储的 Amazon S3(我们在其中托管我们的 appinstaller 和 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=&quot;TradingView, Inc.&quot;, O=&quot;TradingView, Inc.&quot;, 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和评论被切断了吗?这是传递优化服务的格式错误的 HTTP 范围请求的结果。

解决方法:您已经猜到了吗?是的,只是不要改变 appinstaller 的大小!例如,我们用 XML 注释填充它,精确到 4096 字节,如果我们需要向 XML 添加更有意义的内容,我们只需从 XML 注释中删除一些字符,使其再次变为 4096 字节。我们甚至在我们的 gitlab 部署管道中进行了简单的大小测试,以确保不会意外更改 appinstaller 的大小。

您可以查看我们自 2021 年 4 月以来使用的当前生产应用安装程序:https ://tvd-packages.tradingview.com/stable/latest/win32/TradingView.appinstaller

PS如果对同一个 URL 执行请求,就会出现问题。如果 URL 更改,DoSvc HTTP 客户端逻辑将其作为不同的资源处理。这就是为什么 appinstaller 文件更有可能成为这个问题的受害者。

于 2021-08-29T21:07:45.840 回答
4

这是 Windows 交付优化服务中的一个错误,我们现在所能做的只是一种解决方法。

开发人员: 这个问题是由于版本号的一部分改变了它的位数,比如从 1.0.9.9 到 1.0.10.0,如果你让构建过程自动增加这些数字,这会很快发生。解决方法是转入下一个版本(1.1.0.0)。处理此问题的最佳方法可能是始终从基本版本 0.100.100 或 0.1000.1000 开始,否则您将在可用的总版本号方面受到严重限制。

用户:任务管理器 -> 服务 -> DoSvc -> 重新启动 这比系统重新启动更快更方便。

注意:服务的损坏状态是由此版本编号错误引起的,但是一旦发生,重新启动是纠正它的唯一方法。

于 2021-05-04T18:58:36.827 回答
1

补充@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}

我们可以更清楚地看到可能的值范围:4 个部分中的任何一个都为 0..65535,但由于存在错误,第 4 部分被限制为单个数字 0..9。

对我有用的最小版本号是0.0.0.0.

于 2021 年 5 月 5 日在最新的 Win Server 2019 上测试

于 2021-05-13T09:59:59.260 回答