【问题标题】:Installer for .net core 3 wpf/winforms (non MSIX)?.net core 3 wpf/winforms(非 MSIX)的安装程序?
【发布时间】:2019-09-16 10:52:27
【问题描述】:

因此,我们完成了一些到 .net 核心的 wpf 转换,现在我们需要将一个作为安装程序发送给外部客户端。以前我们使用 ClickOnce,但在 .net 核心中已弃用,不会根据 MS 移植,他们推荐 MSIX。但是,正如我们从文档中了解到的那样,即使我们将旁加载 WPF 应用程序,它仍将在具有虚拟化文件系统的沙箱中运行。这对我们来说是不行的,它显然是在设计时考虑了 UWP+Marketplace 交付。我们需要文件系统上的应用程序具有对文件系统的完全访问权限,即“旧方法”。

我们可以将它们以 zip 文件的形式发送并让客户解压,但管理层认为这不太专业,因此我们需要一个类似于 msi/clickonce 的交付包。有没有人在 MSIX 之外的核心上交付应用程序?

【问题讨论】:

  • 理论上您可以按照here 的建议使用 WiX,但鉴于 .NET Core 3 仍处于预览阶段,如果目前还没有选项,我不会感到惊讶。还“管理层认为这不那么专业”,但认为将预览/实验代码交付生产是专业的?
  • @MindSwipe,预览版 9 是生产级,已获 MS 批准发布。发货前我们一直在等待预览版 9。
  • @mjwills 那是选项 B,如果我们找不到其他解决方案
  • @mmix:打包为 MSIX 的 WPF 应用程序不会在沙箱中运行。可以写入除应用程序安装目录之外的所有位置。但是,对某些特殊文件夹的写入会被重定向。您想将文件保存在哪里?

标签: c# wpf .net-core-3.0 wpf-core wpf-core-3.0


【解决方案1】:

编辑:微软宣布他们将在 .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 核心应用的步骤是:

  1. 在您的解决方案中创建一个 Windows 应用程序打包项目。

  2. 右键单击 Windows 应用程序打包项目的 Applications 子文件夹,然后选择 Add Reference。然后选择你的目标项目。

  3. 更改您的 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。

  4. 右键单击您的 Windows 应用程序打包项目并选择发布,然后选择创建应用程序包。

  5. 选择 Sideloading 然后选中启用自动更新。

  6. 为了在客户端机器上安装软件包,您必须对其进行签名。我建议您创建一个自签名证书。您必须在客户端计算机中安装证书,以便软件包受信任并且您可以安装它。如果您在域中,则可以使用组策略部署自签名证书。 最佳情况是使用由受信任的根证书颁发机构提供的受信任证书对包进行签名。我个人的选择是在我自己的 Windows 证书颁发机构(在我的本地域中受信任)中创建一个证书。如果您决定使用受信任的证书对您的包进行签名,这是命令行:


  .\SignTool.exe sign /fd SHA256 /a /f yourcert.pfx /p yourpassword *.appx

  1. 选择从不生成应用程序包。

  1. 选择要发布包的网络共享

为了在 Windows 7 sp1 机器上执行包安装程序,您必须事先相应地安装 msixmgrSetup-1.1.0.0-x64.msi 或 msixmgrSetup-1.1.0.0-x86.msi。可以找到安装程序here

Windows 10 机器将立即识别安装程序。

如果你想了解更多关于 msix 包的信息,你有一个很好的解释here

我希望本指南可以帮助您使部署系统正常工作。

【讨论】:

  • 我已经明确指出我们不想使用 MSIX。我们不在乎它的 MS 推荐方式。微软最近推荐了很多完全自助的东西。由于我们不会也不会通过 MS Marketplace 发布,因此我们不需要添加抽象。
【解决方案2】:

好吧,显然,我们再次面临来自 MS 的“我们的方式或高速公路”,所以我们只使用了 Inno Setup。在我们获得正确的安装过程或 MSIX 允许在没有不必要的文件系统抽象的情况下进行非沙盒设置之前,必须这样做。

【讨论】:

  • zip 或 Inno Setup 安装程序可能太多,而 .NET Core 3.0 允许您发布单个可执行文件。
  • 如果您想符合 MSFT(在应用程序部署方面),您的客户至少会喜欢 MSI。这提供了安装静默(用于大规模企业部署)的标准功能、如果发生崩溃时的本机回滚支持等等。 Inno Setup 功能强大,但在谈论 LOB 应用时并不可取。我知道 MSIX 目前很“热门”并且有一些限制,但 MSI 仍然是更好的选择。
【解决方案3】:

还有其他工具,例如 Advanced Installer 或 InstallShield,可以现在和以后创建 MSI/EXE 安装程序,如果您决定使用 MSIX,您只需将新版本添加到当前项目。

该工具会自动将 MSI 的内容与 MSIX 同步,或者至少这是 Advanced Installer 为您所做的。

它们还有一个 VS 扩展,因此您可以在 Visual Studio IDE 中构建安装程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 2022-01-16
    • 1970-01-01
    • 2021-07-04
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多