C#下实现在线升级

//这是一个webservice

private AppUpdate.UpdateServ UpdateSvr;


private void button1_Click(object sender, System.EventArgs e)
{
 
if(LinkWebServices()==true)
{
this.label1.Text="连接服务器. PASS";

if(CheckVer()==true)
{
this.label2.Text="检查最新版本并下载.PASS";
 
}

else
{
this.label2.Text="检查最新版本并下载.FAIL";
}

}

else
{
this.label1.Text="连接服务器.FAIL";
}

}


//这是用来与升级服务器建立连接
private bool LinkWebServices()
{
try
{
UpdateSvr
=new UpdateServ();
return true;
}

catch
{
return false;
}

}


//调用webservice用来检查是不是有最新的版本
private bool CheckVer()
{
string path =Application.StartupPath;
try
{
VersionCheck(path);
return true;
}

catch(Exception ex)
{
MessageBox.Show(ex.ToString());
return false;
}

}


private void VersionCheck(string desPath)
{
try
{
查看文件和目录


System.Xml.XmlDocument serverXmlDoc 
= UpdateSvr.AppUpdateVertion();
System.Xml.XmlDocument localXmlDoc 
= new System.Xml.XmlDocument();
localXmlDoc.Load(desPath 
+ "UpdateConfig.xml");
bool newVersionExist = false;
bool moduleExist = false;
System.Xml.XmlNode serverNode0 
= serverXmlDoc.ChildNodes[0];
System.Xml.XmlNode localNode0 
= localXmlDoc.ChildNodes[0];
foreach(System.Xml.XmlNode serverNode in serverNode0)
{
moduleExist 
= false;
foreach(System.Xml.XmlNode localNode in localNode0)
{
//找到对应模块
if(localNode.ChildNodes[0].InnerText == serverNode.ChildNodes[0].InnerText)
{
moduleExist 
= true;
//版本号判断
if(localNode.ChildNodes[1].InnerText.CompareTo(serverNode.ChildNodes[1].InnerText) < 0)
{
newVersionExist 
= true;
if(System.Configuration.ConfigurationSettings.AppSettings["NetStyle"].ToString()=="internet")
{
DownloadFile(serverNode.ChildNodes[
2].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);
}

else
{
DownloadFile(serverNode.ChildNodes[
3].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);
}

}

break;
}

}

//没找到对应模块
if(false == moduleExist)
{

if(System.Configuration.ConfigurationSettings.AppSettings["NetStyle"].ToString()=="internet")
{
DownloadFile(serverNode.ChildNodes[
2].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);
}

else
{
DownloadFile(serverNode.ChildNodes[
3].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);
}

}

}

//写入新UpdateConfig.xml升级完毕后替换
if(newVersionExist)
{
serverXmlDoc.Save(tempPath 
+ "UpdateConfig.xml");
if(DialogResult.Yes == MessageBox.Show("有新版本,是否更新?","提示",MessageBoxButtons.YesNo))
{
string[] dirs = System.IO.Directory.GetFiles(tempPath, "*.*");
string fileName;
foreach (string dir in dirs)
{
fileName 
= ((dir.Split(Convert.ToChar(@"\")))[dir.Split(Convert.ToChar(@"\")).Length - 1]);
if(System.IO.File.Exists(desPath + fileName))
{
//TODO:可以支持备份以前版本
System.IO.File.Delete(desPath + fileName);
}

//TODO:如果系统正在运行,您得停止系统,至于如何停止,也许可以使用System.Diagnostics.Process
System.IO.File.Move(dir,desPath + fileName);
}

MessageBox.Show(
"升级完毕");
}

else
{
//TODO:可以支持重新提示升级
}

}

}

catch(Exception ex)
{
throw new Exception("升级失败,原因是:" + ex.Message,ex);
}

}


//下载最新的文件

private void DownloadFile(string source,string fileName)
{
try
{
System.Net.WebClient myWebClient 
= new System.Net.WebClient();
myWebClient.DownloadFile(source,fileName);
}

catch(Exception ex)
{
throw new Exception("下载失败,原因是:" + ex.Message,ex);
}

}


 

原文地址:https://www.cnblogs.com/ami/p/455707.html