UWP 应用安装通过 UI 失败,但在 PowerShell 中可以运行

UWP 应用安装通过 UI 失败,但在 PowerShell 中可以运行

我正在尝试分发 UWP 应用程序,但遇到了一个稍微奇怪的问题。

  • 该应用程序使用 Visual Studio 的自动更新功能构建,生成一个.appinstaller文件和相关的 MSIX 包等
  • 这些工件被上传到 Azure 应用服务进行分发
  • 下载并运行.appinstaller文件时出现错误Error in parsing the app package.- 没有特别的帮助
  • 该应用程序已使用安装在Trusted Publishers
  • 服务器上的文件web.config设置为正确映射 MIME 类型:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.webServer>
    <staticContent>
      <mimeMap fileExtension=".appx" mimeType="application/appx" />
      <mimeMap fileExtension=".msix" mimeType="application/msix" />
      <mimeMap fileExtension=".appxbundle" mimeType="application/appxbundle" />
      <mimeMap fileExtension=".msixbundle" mimeType="application/msixbundle" />
      <mimeMap fileExtension=".appinstaller" mimeType="application/appinstaller" />
    </staticContent>
  </system.webServer>
</configuration>
  • 使用 PowerShell(未提升)运行安装可Add-AppxPackage -Appinstaller https://[test].azurewebsites.net/[appname].appinstaller正确安装该应用程序,然后它可以正常工作。

  • 使用 Fiddler,我发现通过 UI 安装会导致服务器出现 412 错误:

要求:

GET https://[test].azurewebsites.net/[appname]_1.0.0.0_Test/[appname]_1.0.0.0_x64.msixbundle HTTP/1.1
Connection: Keep-Alive
Accept-Encoding: gzip, deflate
If-Match: W/"086c9a4cfd51:0"
Range: bytes=10878976-11010047
If-Unmodified-Since: Mon, 20 May 2019 20:42:56 GMT
Host:[test].azurewebsites.net

回复:

HTTP/1.1 412 Precondition Failed
Content-Length: 86
Content-Type: text/html
Last-Modified: Mon, 20 May 2019 20:42:56 GMT
Accept-Ranges: bytes
ETag: W/"086c9a4cfd51:0"
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Date: Mon, 20 May 2019 20:21:12 GMT

The request was not completed due to preconditions that are set in the request header.
  • PowerShell 客户端似乎没有发送If-Unmodified-SinceIf-Match标头。
GET https://[test].azurewebsites.net/[appname]_1.0.0.0_Test/[appname]_1.0.0.0_x64.msixbundle HTTP/1.1
Connection: Keep-Alive
Range: bytes=11079260-11145819
User-Agent: App Virt Client/1.0
Host: [test].azurewebsites.net

鉴于上述情况:

  • .appinstaller我是否缺少在 IIS 下托管 UWP 的任何明显的服务器配置?
  • 通过 UI 侧载 UWP 应用程序是否存在已知问题.appinstaller
  • 有没有办法配置 IIS 以忽略先决条件,以测试这些先决条件是否导致了问题?

编辑:

找到一个日志文件 ( AILog.txt):

[Tue May 21 15:40:17 2019]{10188} Manifest Info -> Package is Not Headless
[Tue May 21 15:40:17 2019]{10188} Manifest Info -> Package is Not a Modification Package
[Tue May 21 15:40:17 2019]{10188} ERROR: AppsInfo -> Error: [0x80004005]

编辑2:

经过大量调查后,我得到了一个只有相对较少改动的工作版本:

  • EnableDotNetNativeCompatibleProfile(我将其设置为true
  • RuntimeIdentifiers(我将这些添加到.csproj 文件中)
  • 从 VS2017 构建,而不是 VS2019

希望通过排除法可以找出哪一个是罪魁祸首。

相关内容