Mag*_*arp 5 xml windows azure-devops msix appinstaller
我正在尝试遵循 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>
Run Code Online (Sandbox Code Playgroud)
如果我运行 MSIX 文件,它会按原样安装。我一直在尝试遵循这个:https :
//docs.microsoft.com/en-us/windows/msix/desktop/azure-dev-ops
我收到此错误:
如果我删除 UpdateSettings 属性,它只会导致另一个错误:“应用程序安装失败并显示错误消息:Appinstaller 操作失败,错误代码为 0x80D05011。详细信息:未知错误 (0x80d05011)”
请帮忙。
Nip*_*ris 12
好吧,经过三天无望的调试和多次尝试寻找这个问题的根源,我们终于找到了答案。请参阅下文了解解决方法。
传递优化服务错误地缓存其检索的任何 HTTP 资源的大小(可以是应用安装程序文件或 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
Run Code Online (Sandbox Code Playgroud)
但是,如果您更新了 Web 服务器上的 appinstaller 文件,并且其大小增加了(例如,增加到 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
Run Code Online (Sandbox Code Playgroud)
你注意到了吗Content-Range: bytes 0-724/4096,评论被切断了?这是由交付优化服务发送的格式不正确的 HTTP Range 请求造成的。
解决方法:您已经猜到了吗?是的,只是不要改变应用程序安装程序的大小!例如,我们用 XML 注释将其填充到 4096 字节,如果我们需要向 XML 添加更多合理的内容,我们只需从 XML 注释中删除一些字符即可使其再次达到 4096 字节。我们甚至在 gitlab 部署管道中进行了简单的大小测试,以确保 appinstaller 的大小不会意外更改。
您可以查看我们自 2021 年 4 月以来使用的当前生产应用程序安装程序:https://tvd-packages.tradingview.com/stable/latest/win32/TradingView.appinstaller
PS如果对同一 URL 执行请求,则会出现问题。如果 URL 更改,DoSvc HTTP 客户端逻辑会将其作为不同的资源进行处理。这就是为什么应用程序安装程序文件更有可能成为此问题的受害者。
如果这对任何人有帮助,我发现这个线程:https : //techcommunity.microsoft.com/t5/msix-deployment/windows-10-2004-msix-not-updating-please-check-whether-the/mp/1466701
基本上答案是重新启动您的机器。我做的,它似乎已经解决了
正如@The-pademelon 还提到重新启动传递优化服务也有效。

这是Windows交付优化服务中的一个错误,我们现在所能做的就是解决方法。
开发人员: 该问题是由部分版本号更改其位数引起的,例如从 1.0.9.9 到 1.0.10.0,如果您让构建过程自动递增这些数字,那么这种情况会很快发生。解决方法是滚动到下一个版本(1.1.0.0)。处理这个问题的最佳方法可能是始终从 0.100.100 或 0.1000.1000 的基本版本开始,否则可用的总版本号将受到严重限制。
用户:任务管理器 -> 服务 -> DoSvc -> 重新启动 这比系统重新启动更快更方便。
注意:服务的损坏状态是由这个版本编号错误引起的,但一旦发生,重新启动是纠正它的唯一方法。