GZUpdate自动升级之自定义更新补丁程序


GZUpdate自动升级之自定义更新补丁程序

介绍

GZUpdate自动升级程序对外开放两个接口IBeforeUpdateProcessIAfterUpdateProcess

我们可以写个升级类库dll,分别继承这两个接口,实现一些业务逻辑的修改,比如,文件的移动操作,数据库数据调整,修改配置文件 等操作

  • IBeforeUpdateProcess:已经下载更新文件,准备应用(替换)更新文件执行的业务逻辑
  • IAfterUpdateProcess:已经下载更新文件,准备应用(替换)更新文件执行的业务逻辑
接口描述
IBeforeUpdateProcess已经下载更新文件,准备应用(替换)更新文件执行的业务逻辑
IAfterUpdateProcess已经下载更新文件,准备应用(替换)更新文件执行的业务逻辑

两个接口都是继承自IUpdateProcess

IUpdateProcess接口属性描述

类别名字类型描述
属性IDlong更新补丁程序ID,一般定义为 年月日时分
方法Processvoid执行业务逻辑,比如文件的移动操作,数据库数据调整,修改配置文件 等操作

示例

GZUpdate自动升级之自定义更新补丁程序

代码:

补丁创建日期: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__

GZUpdate自动升级之自定义更新补丁程序

可以配置不同的程序集名称,只要和更新服务注册方法中的补丁参数保持一致即可

编译项目我们得到一个 __update__.dll 补丁文件

制作补丁更新包

把补丁dll文件和其他更新文件一同放入更新包即可

更新服务注册配置补丁文件

在GZUpdate更新服务注册时,配置对应的补丁文件名

UpdateServices.Regsiter方法中 第四个参数,注意:需要包含补丁后缀 *.dll

C# 全选
UpdateServices.Regsiter(updateServer, "cms", updateVersionType, "__update__.dll");

 

结束

到此,我们就可以更新客户端了,更新后,会自动按照业务逻辑去执行补丁程序

每个补丁程序只会执行一次,更新服务会自动记录最新安装的补丁ID,下次更新的时候,只会执行大于记录补丁ID的补丁

切记:新的补丁ID配置不要小于旧的补丁ID,如果指定了小于旧补丁的ID,那么改补丁将不会被执行

 

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
下一篇:没有了
评论列表

发表评论

评论内容
昵称:
关联文章

GZUpdate自动升级定义更新补丁程序
GZUpdate自动升级程序客户端演示
GZUpdate自动升级服务 .NET C/S Winform客户端程序自动升级演示
VS制作C#程序windows安装程序
SQL Prompt定义代码片段
窗体GridView布局定义
C# Winform 定义异常处理方法
.NET Core 定义中间件 Middleware
更新部署
局域网共享文件自动更新办法
C# 配置文件增加定义节点
Excel定义格式千分符
定义表格操作按钮 GridControlEmbeddedNavigator
TinyMCE定义字体大小列表
窗体定义权限操作按钮
如何在 Vue 2 中使用 Webpack 构建时为 favicon.ico 设置定义根路径前缀
CMD运行命令程序自动暂停问题解决
WPF程序级资源
网站迁移纪实:从Web Form 到 Asp.Net Core (Abp vNext 定义开发)
AS.NET Core定义类中全局访问HttpContext