一 原理:将生成的Debug文件夹下的所有文件都拷贝到本地。
二 思路:
在同一解决方案下面添加两个系统,一个是主系统MainSystem,一个是负责更新的辅助系统UpdateSystem,启动系统设定为主系统MainSystem。
MainSystem启动时,到数据库里检查最新的版本(每次更新系统应更新数据库中对应的版本信息);
如果系统当前版本低于数据库中的版本,则在主系统中先更新辅助系统UpdateSystem系统的相关文件,
更新UpdateSystem时,打开UpdateSystem系统,关掉当前系统,先下载UpdateSystem.xml文件,在该XML中获取对应UpdateSystem相关的文件,然后根据获得的信息下载UpdateSystem相应的文件;
下载完UpdateSystem后,其中应包含个MainSystem.xml文件,该XML文件中放有MainSystem中对应的服务器上的最新版的文件位置和需要拷贝到本地的文件位置,根据
该xml文件下载相应的MainSystem相关的文件到本地,即完成了系统的更新。
发布新版本系统时将新版文件放到IIS下面,首先验证可以通过网页访问下载即可。
三 关键代码示例
切换系统的代码为(先打开新系统,再关掉当前系统才能进行相关文件的替换):
string path = System.Windows.Forms.Application.StartupPath;
System.Diagnostics.Process.Start(path+"//forupdate.exe",string.Empty);
Application.Exit();
xml文件示例:
<?xml version="1.0" encoding="utf-8" ?>
<files>
<file>
<src>http://192.168.0.1/update/update.exe</src>
<des>F:\\Debug\\update.exe</des>
</file>
</files>
根据xml文件拷贝服务器上文件到本地的函数为:
private void copyfile(string src, string des)
{
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(src);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream str_response = response.GetResponseStream();
Stream str_new = new FileStream(des, FileMode.Create);
byte[] b = new byte[1024];
int osize = str_response.Read(b, 0, (int)b.Length);
while (osize > 0)
{
str_new.Write(b, 0, osize);
osize = str_response.Read(b, 0, (int)b.Length);
}
str_new.Close();
str_response.Close();
request.Abort();
response.Close();
}
C#读取XML文件的代码为:
DataSet xmlds = new DataSet();
xmlds.ReadXml("a.xml");
四 Tips
从远程服务器拷贝文件到本地时,最好先拷贝到临时文件夹,防止拷贝到一半异常停止,导致系统不能使用;
主系统MainSystem获取UpdateSystem.xml文件的信息时最好从数据库中查找,防止更换存放系统的服务器更换IP地址导致不能正常更新。