做客户端开发的人员往往有着一些困惑,自动更新程序是自己编写一个,还是买成品。其实我个人认为,自己编写一个自动更新的客户端动态库很简单。而且可以作为以后的通用更新程序。接下来就在这儿班门弄斧一下吧!
1、服务器端口发布Upgrade.asmx的服务,客户端每次启动时读取服务中的GetXmlList方法获取一下最新的程序清单,一般程序清单为这样的xml文件
<?xml version="1.0" encoding="utf-8" ?>
<UpdateFileList>
<File path="de\ZedGraph.resources.dll" url="http://192.168.1.110/WebService/Upgrade/de/ZedGraph.resources.zip"
lastVer="5.0.9.30511" size="5" needRestart="true" />
<File path="es\ZedGraph.resources.dll" url="http://192.168.1.110/WebService/Upgrade/es/ZedGraph.resources.zip"
lastVer="5.0.9.30511" size="5" needRestart="true" />
</UpdateFileList>
lastVer为最终dll版本,url为更新文件路径,needRestart为更新了这个文件系统是否需要重启
2、将清单对象与本地对象LocalUpgradeFileItem进行比较,如果lastVer不同马上更新,如果没有该文件就删除
//获取待更新、添加类文件列表
foreach (UpgradeFileItem i in serverFileItems)
{
addFlag = true;
foreach (LocalUpgradeFileItem j in localFileItems)
{
if (i.Path.ToLower().Equals(j.Path.ToLower()))
{
addFlag = false;
//加载待更新文件列表
if (!i.LastVer.Equals(j.LastVer))
{
updateFileItems.Add(new LocalUpgradeFileItem(i.Path, i.LastVer, i.Url, i.NeedRestart, i.Size, 1));
totalSize += i.Size;
break;
}
}
}
if (addFlag)
{
//加载待添加文件列表
updateFileItems.Add(new LocalUpgradeFileItem(i.Path, i.LastVer, i.Url, i.NeedRestart, i.Size, 2));
totalSize += i.Size;
}
}
核心代码就这么几句完事,删除dll文件的代码在循环里加上几句话就可以了。
当然,每次程序升级维护人员就比较麻烦了,需要更新服务器端的程序文件!而且和物理文件位置必须保持一致!
顺便灌灌水:安庆男科医院