做客户端开发的人员往往有着一些困惑,自动更新程序是自己编写一个,还是买成品。其实我个人认为,自己编写一个自动更新的客户端动态库很简单。而且可以作为以后的通用更新程序。接下来就在这儿班门弄斧一下吧!

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文件的代码在循环里加上几句话就可以了。

当然,每次程序升级维护人员就比较麻烦了,需要更新服务器端的程序文件!而且和物理文件位置必须保持一致!

顺便灌灌水:安庆男科医院