c# - .net core 3 wpf/winforms(非 MSIX)的安装程序?
问题描述
因此,我们完成了一些到 .net 核心的 wpf 转换,现在我们需要将一个作为安装程序发送给外部客户端。以前我们使用 ClickOnce,但在 .net 核心中已弃用,不会根据 MS 移植,他们推荐 MSIX。但是,正如我们从文档中了解到的那样,即使我们将旁加载 WPF 应用程序,它仍将在具有虚拟化文件系统的沙箱中运行。这对我们来说是不行的,它显然是在设计时考虑了 UWP+Marketplace 交付。我们需要文件系统上的应用程序具有对文件系统的完全访问权限,即“旧方法”。
我们可以将它们作为 zip 文件发送并让客户解包,但管理层认为这不太专业,因此我们需要一个类似于 msi/clickonce 的交付包。有没有人在 MSIX 之外的核心上交付应用程序?
解决方案
编辑:微软宣布他们将在 .NET 5 中包含 ClickOnce 支持
您可以通过旁加载 msix 包在组织内部部署 .NET Core 和 .NET 5 应用程序。
多年来,我一直成功地使用 Clickonce 部署 .NET 业务线应用程序。
现在我正在将我的应用程序更新到 .NET Core,我想要类似于 Clickonce 的东西。换句话说:在网络共享中发布您的安装程序,并将您的自动更新应用程序部署到您的客户端,只需简单地处理安装程序的快捷方式即可。
您可以使用 msix 包实现此目的。问题是您仅限于 Windows 10 版本 1709 及更高版本
该解决方案于 12 月 19 日与MSIX Core 1.1一起出现。使用 msix 核心支持打包您的应用程序,您可以针对 Windows 7 SP1 及更高版本,这是我需要的,因为在工作中我们正在慢慢地从 Windows 7 过渡到 Windows 10,我仍然必须支持旧版本的 Windows。
使用 msix 核心打包 .net 核心应用程序的步骤是:
在您的解决方案中创建一个 Windows 应用程序打包项目。
右键单击 Windows 应用程序打包项目的 Applications 子文件夹,然后选择 Add Reference。然后选择您的目标项目。
更改您的 Package.manifest(参考:msix-packaging/MsixCore at master·microsoft/msix-packaging·GitHub)右键单击您的 Package.manifest 文件并选择查看代码更改为:
<Dependencies> <TargetDeviceFamily Name="MSIXCore.Desktop" MinVersion="6.1.7601.0" MaxVersionTested="10.0.10240.0" /> <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.16299.0" MaxVersionTested="10.0.18362.0" /> </Dependencies>
有了这个,您将您的最小版本稳定到 MSIXCore.Desktop,换句话说,Windows 7 sp1。
右键单击您的 Windows 应用程序打包项目并选择发布,然后选择创建应用程序包。
选择旁加载,然后选中启用自动更新。
为了在客户端机器上安装软件包,您必须对其进行签名。我建议您创建一个自签名证书。您必须在客户端计算机中安装证书,以便软件包受信任并且您可以安装它。如果您在域中,则可以使用组策略部署自签名证书。最佳情况是使用由受信任的根证书颁发机构提供的受信任证书对包进行签名。我个人的选择是在我自己的 Windows 证书颁发机构(在我的本地域中受信任)中创建一个证书。如果您决定使用受信任的证书签署您的包,这是命令行:
.\SignTool.exe sign /fd SHA256 /a /f yourcert.pfx /p yourpassword *.appx
- 选择从不生成应用程序包。
- 选择您的网络共享以发布包
为了在 Windows 7 sp1 机器上执行包安装程序,您必须事先相应地安装 msixmgrSetup-1.1.0.0-x64.msi 或 msixmgrSetup-1.1.0.0-x86.msi。你可以在这里找到安装程序
Windows 10 机器将立即识别安装程序。
如果您想了解有关 msix 包的更多信息,请在此处有一个很好的解释
我希望本指南可以帮助您使部署系统正常工作。
推荐阅读
- android - Android RxJava 线程重用,这是一种不好的做法吗?
- c# - 有没有办法捕获未绑定的参数或为不受名称严格绑定的查询字符串参数定义参数样式溢出?
- google-maps - 在最新版本的 React-native(0.61.1) 谷歌地图在 android 和 ios 中显示空白屏幕
- javascript - Codeigniter ajax 状态码显示 200 但显示错误消息
- r - 交叉表以补充 Shiny 应用程序中的堆叠条形图
- java - 为什么我一直抛出 NullPointerException?
- vue.js - 是否可以列出 Vue 全局组件中的所有 $refs 属性?
- android - 当我将 FFmpeg Native 与 C++ 文件一起使用时,如何在 android 中编写命令?
- python - 如何在python中为列数据生成所有可能的分组
- sql - 是否可以使用当前行的非空单元格数更新列?