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. ...
随机推荐
- Android DDMS检测内存泄露
Android DDMS检测内存泄露 DDMS是Android开发包中自带工具,可以测试app性能,用于发现内存问题. 1.环境搭建 参考之前发的Android测试环境搭建相关文章,这里不再复述: 2 ...
- MySQL计算销售员昨日各指标综合得分_20161206
数据需求如上,新增重激活以15天未下单为界定 SELECT d.销售员,(日销售额得分*0.6+日新增客户数得分*0.15+日客单价得分*0.1+日客户平均产品数得分*0.15)AS 综合得分,日销售 ...
- socket笔记
参考: http://www.cnblogs.com/dolphinX/p/3460545.html http://www.cnblogs.com/wei2yi/archive/2011/03/23/ ...
- div一直浮动在页面的底部
永远在底部是那种无论滚动条怎么拉,都可以看见悬浮在底部的那种,如果是那种,是用固定定位做的.另外注意页面中最后的元素或者body要空出固定条的高度,不然最后的元素会被遮挡. html: <div ...
- IE中无法执行JS脚本 解决WINDOWS SERVER 2008弹出INTERNET EXPLORER增强安全配置正在阻止来自下列网站的内容
在默认状态下,使用Windows Server 2008系统自带的IE浏览器访问网页内容时,我们时常发现“Internet Explorer增强安全配置正在阻止来自下列网站的内容”的提示导致不能打开网 ...
- 6.Mybatis中的动态Sql和Sql片段(Mybatis的一个核心)
动态Sql是Mybatis的核心,就是对我们的sql语句进行灵活的操作,他可以通过表达式,对sql语句进行判断,然后对其进行灵活的拼接和组装.可以简单的说成Mybatis中可以动态去的判断需不需要某些 ...
- Oracle 11g AWR和ADDM性能报告
一.自动工作负载库(Automatic Workload Repository,AWR) 自动工作负载库(Automatic Workload Repository,AWR)是在Oracle公司提供的 ...
- Eclipse PHP Studio(EPP)
Eclipse PHP Studio (EPP) 中文版官方网站 :http://epp.php100.com/ EclipsePHP Studio 简体中文版介绍 - EPP EclipsePHP ...
- Xcode升级插件失效,与添加插件不小心点击Skip Bundle解决办法
一.当发现升级xcode后,插件不能使用,解决办法如下: 1.查看Xcode的UUID 在终端执行 defaults read /Applications/Xcode.app/Contents/Inf ...
- win32api 获取文件版本信息
#coding:utf-8 myPath="C:\\ime" import os from win32api import GetFileVersionInfo, LOWORD, ...