使用Asp.Net Core进行自我更新/卷影复制

问题描述 投票:11回答:3

我正在编写一个Asp.Net Core应用程序,该应用程序应该能够自行更新(在运行时替换自己的二进制文件)。

This MSDN article用经典的.Net框架描述了阴影复制,这正是我所需要的。但.Net Core中缺少整个AppDomain的东西。

所以我的问题是:

  • 在.Net Core中是否有另一种方法可以启用阴影复制程序集?
  • .Net Core中是否有其他机制可以构建自我更新的应用程序?
asp.net-core .net-core appdomain auto-update shadow-copy
3个回答
9
投票

由于.NET Core中没有用于执行此操作的内置机制,因此我最终实现了自己的自定义解决方案。它的工作方式大致如下:

  1. 正在运行的应用程序将新二进制文件下载并提取到新文件夹。
  2. 正在运行的应用程序启动一个小更新程序进程以下参数通过命令行传递给更新程序进程: 正在运行的应用程序的进程ID 正在运行的应用程序的二进制路径 下载的二进制文件的路径
  3. 正在运行的应用程序退出。
  4. 更新程序进程等待,直到正在运行的应用程序已退出(使用进程ID)或强制终止正在运行的应用程序,如果它在给定的超时内没有自行退出。
  5. updater进程删除现有的二进制文件并复制新下载的二进制文件。
  6. updater进程启动主应用程序的新版本。

确保在主应用程序中尽可能多地执行(下载,解包,验证......)并使更新程序过程尽可能简单(最大限度地降低失败风险)。

事实证明这种方法非常稳定。


4
投票

在.NET Core中没有构建影子复制工具


2
投票

.Net API Browser表示在.Net Core中设置它所需的属性是,但AppDomainSetup不是。

需要说明的是,AppDomain已添加到.Net Standard 2.0中,但目前不支持创建域

© www.soinside.com 2019 - 2024. All rights reserved.