GZUpdate自动升级之自定义更新补丁程序
介绍
GZUpdate自动升级程序对外开放两个接口IBeforeUpdateProcess
和 IAfterUpdateProcess
我们可以写个升级类库dll,分别继承这两个接口,实现一些业务逻辑的修改,比如,文件的移动操作,数据库数据调整,修改配置文件 等操作
- IBeforeUpdateProcess:已经下载更新文件,准备
应用
(替换)更新
文件前
执行的业务逻辑 - IAfterUpdateProcess:已经下载更新文件,准备
应用
(替换)更新
文件后
执行的业务逻辑
接口 | 描述 |
---|---|
IBeforeUpdateProcess | 已经下载更新文件,准备应用 (替换)更新 文件前 执行的业务逻辑 |
IAfterUpdateProcess | 已经下载更新文件,准备应用 (替换)更新 文件后 执行的业务逻辑 |
两个接口都是继承自IUpdateProcess
IUpdateProcess
接口属性描述
类别 | 名字 | 类型 | 描述 |
---|---|---|---|
属性 | ID | long | 更新补丁程序ID,一般定义为 年月日时分 |
方法 | Process | void | 执行业务逻辑,比如文件的移动操作,数据库数据调整,修改配置文件 等操作 |
示例
代码:
补丁创建日期:2022-01-01 10:14
C# 全选
public class Patch202201011014_CopyViewComponents : GZUpdate.Client.IAfterUpdateProcess
{
public long ID => 202201011014;
public void Process()
{
/*
* 在更新后,迁移Views\Shared\Components中的csthml文件到同名文件夹中,并且重命名为Derault.cshtml
* 例:Views\Shared\Components\Test.cshtml 迁移到 Views\Shared\Components\Test\Default.cshtml
*/
var dirPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Views\\Shared\\Components\\");
//var dirPath = System.IO.Path.Combine("D:\\", "Views\\Shared\\Components\\");
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(dirPath);
foreach (var f in dir.GetFiles("*.cshtml"))
{
if (f.Name.StartsWith("none", StringComparison.OrdinalIgnoreCase))
continue;
var name = System.IO.Path.GetFileNameWithoutExtension(f.FullName);
var _dir = System.IO.Path.Combine(f.DirectoryName, name);
if (!System.IO.Directory.Exists(_dir))
System.IO.Directory.CreateDirectory(_dir);
f.MoveTo(System.IO.Path.Combine(_dir, "Default.cshtml"));
}
}
}
补丁创建日期:2022-02-09 10:12
C# 全选
public class Patch202202091012_RenameArticleView : GZUpdate.Client.IAfterUpdateProcess
{
public long ID => 202202091012;
public void Process()
{
/*
* 重命名 Views\Article中的默认cshtml模板名字
* 例:Views\Article\List.cshtml 重命名为 Views\Article\_Default_List.cshtml
*/
foreach (var f in new string[] { "List.cshtml","ListProduct.cshtml","View.cshtml",
"ViewNavGroup.cshtml","ViewNavList.cshtml","ViewNavTree.cshtml","ViewProduct.cshtml"})
{
string sourceFileName = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Views\\Article\\", f);
if (System.IO.File.Exists(sourceFileName))
{
string destFileName = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Views\\Article\\", "_Default_" + f);
System.IO.File.Move(sourceFileName, destFileName, true);
}
}
}
}
再一个补丁程序中是可以执行多个任务
举个例子,加入示例中的两个补丁是同一个时间的,那么就没必要分成两个类,合并成一个类处理即可
补丁配置
编译补丁
修改补丁程序程序集名称为:__update__
可以配置不同的程序集名称,只要和更新服务注册
方法中的补丁参数
保持一致即可
编译项目我们得到一个 __update__.dll
补丁文件
制作补丁更新包
把补丁dll文件和其他更新文件一同放入更新包即可
更新服务注册配置补丁文件
在GZUpdate更新服务注册时,配置对应的补丁文件名
UpdateServices.Regsiter方法中 第四个参数,注意:需要包含补丁后缀 *.dll
C# 全选
UpdateServices.Regsiter(updateServer, "cms", updateVersionType, "__update__.dll");
结束
到此,我们就可以更新客户端了,更新后,会自动按照业务逻辑去执行补丁程序
每个补丁程序只会执行一次,更新服务会自动记录最新安装的补丁ID,下次更新的时候,只会执行大于记录补丁ID的补丁
切记:新的补丁ID配置不要小于旧的补丁ID,如果指定了小于旧补丁的ID,那么改补丁将不会被执行
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
gzupdate 管理员