MSIX 添加类似于 ClickOnce 的先决条件

Posted

技术标签:

【中文标题】MSIX 添加类似于 ClickOnce 的先决条件【英文标题】:MSIX add prerequisites similar to ClickOnce 【发布时间】:2021-12-22 11:50:54 【问题描述】:

我们有一个较旧的 ClickOnce 安装程序,适用于 Windows 应用程序,该安装程序具有来自第 3 方供应商的 Setup.exe 文件的先决条件。 (确切地说是 webvew2)... ClickOnce 安装程序多年来一直运行良好,当它首次安装我们的 Windows 应用程序时,它还会通过运行其 Setup.exe 作为先决条件来安装第三方供应商应用程序。

现在我们想从 ClickOnce 迁移到 MSIX。 创建 Windows 应用程序打包项目非常简单,只需将我们的 Windows 应用程序添加为项目引用,但我们似乎无法弄清楚如何在新的 Windows 应用程序打包项目中添加第 3 方 Setup.exe 作为先决条件/依赖项。 以下文章讨论了编辑“appinstaller”文件,使其可以包含“OptionalPackages”,但这似乎只适用于“MainPackage”,但我的 appinstaller 文件有“MainBundle”。https://www.syncfusion.com/succinctly-free-ebooks/msix-succinctly/distribute-your-msix-packages 这篇文章谈到了使用 desktop6:InstallActions,但它说“这个元素目前仅用于桌面 PC 游戏......”。https://docs.microsoft.com/en-us/uwp/schemas/appxpackage/uapmanifestschema/element-desktop6-installactions

此外,我们尝试添加到 MSIX 的“引导程序”是 Microsoft WebView2。https://developer.microsoft.com/en-us/microsoft-edge/webview2/ 他们确实有关于 Wix 和 VS 安装程序的部署示例,但在 MSIX 上没有。https://github.com/MicrosoftEdge/WebView2Samples#webview2-deployment

我已经阅读了很多有关 MSIX 文档的文章,但似乎找不到关于 3rd 方依赖项的好示例。https://docs.microsoft.com/en-us/windows/msix/

我想我遗漏了一些东西,因为这基本上是 ClickOnce 中的复选框。 知道如何添加第 3 方 Setup.exe 作为依赖项,以便与我们的应用程序一起安装吗?

【问题讨论】:

【参考方案1】:

MSIX 仅处理其他 MSIX/APPX 依赖项,您不能添加其他类型的包 (EXE/MSI/CO)。

在 APPXManifest 文件中声明依赖项时,必须指定以下详细信息:

    名称:应用程序的名称(例如 Firefox) 发布者:应用的发布者 MinVersion:要安装 MSIX 的系统上必须存在的依赖项的最低版本,声明为 Major.Minor.Build.Revision

您还可以使用 uap6:Optional="true" 元素将依赖项声明为可选。如果此元素未放在清单中,则如果未找到系统上安装的依赖项,则主包的安装将失败。如果应用程序在 Microsoft Store 中可用,则 MSIX 应用程序首先从 MS Store 下载依赖项并安装它,然后继续安装主 MSIX 应用程序。

在您的情况下,WebView2 在商店中不可用,这意味着您不能将其声明为依赖项。 正如 Reily 上面提到的,您还可以考虑将 setup.exe 打包到 MSIX 中并使用 PowerShell 脚本在您拥有的 MSIX 应用程序的第一次运行期间触发一次(请记住,第一次运行必须以管理员权限执行),但不幸的是,这不是一个完美的场景。

【讨论】:

据我了解,来自 MSIX 内部的 PowerShell 脚本需要 ExecutionPolicy RemoteSigned,这不是我可以要求我的客户在他们的计算机上执行的操作。 docs.microsoft.com/en-us/windows/msix/psf/… 遗憾的是,在安装先决条件方面,MSIX 甚至没有接近 ClickOnce。【参考方案2】:

我相信 MSIX 没有很好的方法来处理这样的依赖项。 Some advice from the WebView2 team:

目前缺乏对 WebView2 的 Store/MSIX 支持,因为我们目前正在处理同一类别但具有更高优先级的问题......但我们稍后会到达那里。

如果您是 Win32 完全信任的商店应用或 MSIX 应用,您现在可以做的一件事是,如果尚未安装运行时,您可以从我们的 CDN 下载安装程序(或使用您的 MSIX 包),然后在应用首次启动期间调用它来安装运行时。这需要提升,因为 WebView2 目前只能在每个系统中安装。

祝你好运。根据我的经验,MSIX 的文档记录很差,并且对“快乐路径”之外的情况的支持也很差。我希望你能够让它工作。

【讨论】:

感谢您的链接。我仍然找不到关于这部分的好文章“将安装程序与您的 MSIX 包一起打包,然后在应用程序首次启动期间调用它来安装运行时”。有人如何用他们的 MSIX 包“打包”它? 我可能会从MakeAppX开始;它是用于创建 MSIX 包的主要 CLI 工具。你给它文件,它会返回一个 MSIX 包。如果您在生成 MSIX 包时包含安装程序 exe,它会在安装后出现在您的 exe 旁边的磁盘上(在 C:\Program Files\WindowsApps\package_id 中)。然后你用 Process.Start 或类似的方法运行它。我没有亲自尝试过,但我认为它应该可以工作。如果这一切看起来很痛苦且不必要地困难:欢迎来到 MSIX ?

以上是关于MSIX 添加类似于 ClickOnce 的先决条件的主要内容,如果未能解决你的问题,请参考以下文章

ClickOnce 先决条件 - 如何管理先决条件的安装顺序?

为 ClickOnce 先决条件指定 VC++ Redistributable 版本

MSIX Core解决方案构建错误

自定义 Bootstrapper UI,类似于自定义的 wix UI

使用 MSIX 打包的 WPF 无法通过 Microsoft Store 验证

分析 ClickOnce *启动*时间