Winform(C#.NET)自动更新组件的使用及部分功能实现(一点改进功能)
接前两篇继续:
Winform(C#.NET)自动更新组件的使用及部分功能实现
Winform(C#.NET)自动更新组件的使用及部分功能实现(续)
借鉴文章:http://www.cnblogs.com/jeffersyuan/archive/2007/04/18/718108.html
现象:
由于dll文件比较多,再加之变更比较频繁,而每次点击createxmltools都会重新生成不同的version,
而实际上文件并未发生变化,导致重复更新,浪费资源。
解决方法:
根据文件的信息生成一个哈希值,通过比较哈希值来判断文件是否进行了修改。
主要使用类:MD5CryptoServiceProvider
类的注释:使用加密服务提供程序 (CSP) 提供的实现,计算输入数据的 System.Security.Cryptography.MD5 哈希值。
/// <summary>
/// md5加密文件为hashcode,看文件是否真的有变化
/// </summary>
/// <param name="fileName">文件fullname</param>
/// <returns>根据MD5CryptoServiceProvider加密后的一个值</returns>
private string MD5(string fileName)
{
string temp = "";
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] md5byte = md5.ComputeHash(fs); int i, j;
foreach (byte b in md5byte)
{
i = Convert.ToInt32(b);
j = i >> ;
temp = temp + Convert.ToString(j, );
j = ((i << ) & 0x00ff) >> ;
temp = temp + Convert.ToString(j, );
}
return temp;
}
在createxmltools的项目修改
foreach (FileInfo f in dicInfo.GetFiles())
{
//排除当前目录中生成xml文件的工具文件
if (!getRidOfFiles.Contains(f.Name))
{
string path = dicInfo.FullName.Replace(currentDirectory, "").Replace("\\", "/");
string folderPath=string.Empty;
if (path != string.Empty)
{
folderPath = path.TrimStart('/') + "/";
}
XmlElement child = doc.CreateElement("file");
child.SetAttribute("path", folderPath + f.Name);
child.SetAttribute("url", url + path + "/" + f.Name);
child.SetAttribute("lastver", FileVersionInfo.GetVersionInfo(f.FullName).FileVersion);
child.SetAttribute("size", f.Length.ToString());
child.SetAttribute("needRestart", "false");
child.SetAttribute("version", MD5(f.FullName));
root.AppendChild(child);
}
}
这样就能简单的判断文件是否被修改过了
缺点:并不能真的判定文件没被修改,但是不会每个文件点击生成xml的时候生成不一样的哈希值。只有在dll重新编译的时候哈希值才可能会发生变化。
Winform(C#.NET)自动更新组件的使用及部分功能实现(一点改进功能)的更多相关文章
- Winform(C#.NET)自动更新组件的使用及部分功能实现
声明:核心功能的实现是由园子里圣殿骑士大哥写的,本人是基于他核心代码,按照自己需求进行修改的. 而AutoUpdaterService.xml文件生成工具是基于评论#215楼 ptangbao的代 ...
- Winform(C#.NET)自动更新组件的使用及部分功能实现(续)
接昨天的文章Winform(C#.NET)自动更新组件的使用及部分功能实现 强制更新的实现部分: 将DownloadConfirm窗体修改成单纯的类 public class DownloadConf ...
- Winform自动更新组件分享
作者:圣殿骑士 出处:http://www.cnblogs.com/KnightsWarrior/ 关于作者:专注于微软平台项目架构.管理和企业解决方案.自认在面向对象及面向服务领域有一定的造诣,熟悉 ...
- 【Android】友盟的自动更新组件
前言 又好又专业的服务能帮开发者省很多时间.一开始做项目也准备自己来统计数据.自己做自动更新,随着使用友盟服务的时间增加,渐渐放弃了这种想法,转而研究如何更充分的使用,这里分享一下使用自动更新组件的心 ...
- 分析nuget源码,用nuget + nuget.server实现winform程序的自动更新
源起 (个人理解)包管理最开始应该是从java平台下的maven开始吧,因为java的开发大多数是基于开源组件开发的,一个开源包在使用时很可能要去依赖其他的开源包,而且必须是特定的版本才可以.以往在找 ...
- Winform 打包 混淆 自动更新
路径: 最终的解决方案是,ConfuserEx+Installshield+AutoUpdater.NET,ConfuserEx做代码混淆工作,Installshield可以解决注册表的问题,Auto ...
- winform、C# 自动更新
用IIS或者是Tomcat搭建一个Web服务器,因为没有涉及到动态页面,所以用什么服务器无所谓,网上有太多资料,这里不再赘述. 废话不多说,直接上代码. HttpHelper, 访问网页,下载文件等 ...
- c/s应用程序自动更新组件GeneralUpdate3.2.1发布
一.组件简介 GeneralUpdate是基于.net standard 开发的一款(c/s应用)自动升级程序.该组件将更新的核心部分抽离出来方便应用于多种项目当中目前适用于wpf,控制台应用,win ...
- winform应用程序自动更新版本
http://blog.csdn.net/gxxloveszj/article/details/8278187 http://www.cnblogs.com/x369/articles/105656. ...
随机推荐
- Python之路【第十九篇】:爬虫
Python之路[第十九篇]:爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用 ...
- Mysql数据库的使用经验总结
1. 对mysql插入中文的时候显示乱码,搞了很多天,把服务端.客户端和数据库的编码全改为u8了又重新创建数据库和表还是不行,到最后却发现没有乱码!原来只是windows的cmd没有支持u8,换个客户 ...
- Visual Studio 2015完全离线安装
虽然微软提供了Visual Studio的ISO镜像下载,但这个ISO文件并不完整,安装的过程中依然需要联网下载一些安装包,在中国特色的网络环境下导致安装过程还是非常慢的.另外,在一些网络隔离的环境中 ...
- TortoiseSVN-1.8.11 安装时弹出2503错误导致安装失败解决办法
这个问题主要是由于msi格式文件在win8中默认不是以管理员身份运行造成,可通过命令行解决: 右键单击win8左下角启动图标,选择命令提示符(管理员): 输入:msiexec /package 要安装 ...
- Javascript类型
Javascript 有两中类型:原始类型和对象类型. 原始类型包括:数字,字符串,布尔值,null和undefined.其余的都是对象类型. 原始类型 数字.Javascript采用IEEE754标 ...
- unity3d 射弹基础案例
小白本来想学cocos2dx的,然而c++难学就算了,cocos2dx对新手来说简直坑爹,于是乎转战unity3d学习js,在写出第一个游戏后兴致高多了哎. 回顾一下编辑的过程:1.建立一个cube作 ...
- hdu 3667 拆边加最小费用流
Transportation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- Windows 窗体设计器中的设计时错误
当修改窗体里面某一项时导致窗体报错,但是编译运行没问题,报"依赖项问题"则只需要把报错的那个依赖项删除后再重新引用.
- (六) 一起学 Unix 环境高级编程 (APUE) 之 进程控制
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- Windows CMD命令大全【转】
命令简介 cmd是command的缩写.即命令行 . 虽然随着计算机产业的发展,Windows 操作系统的应用越来越广泛,DOS 面临着被淘汰的命运,但是因为它运行安全.稳定,有的用户还在使用,所以一 ...