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 版本
自定义 Bootstrapper UI,类似于自定义的 wix UI