This is a WebService
Private appupdate. updateserv updatesvr;
private void button#click (Object sender, system. eventargs e)
{< br>
If (linkwebservices () = true)
{< br> This. label1.text = "connect to the server ....... pass ";
If (checkver () = true)
{< br> This. label2.text = "check the latest version and download ....... pass ";
}< br> else
{< br> This. label2.text = "check the latest version and download ....... fail ";
}< BR >}< br> else
{< br> This. label1.text = "connect to the server ....... fail ";
}< BR >}
// This is used to establish a connection with the upgraded Server
Private bool linkwebservices ()
{
Try
{
Updatesvr = new updateserv ();
Return true;
}
Catch
{
Return false;
}
}
// Call WebService to check whether the latest version is available
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
{
# Region viewing files and directories
If (! Despath. endswith (@"\"))
Despath + = @"\";
If (! System. Io. Directory. exists (despath ))
{
System. Io. Directory. createdirectory (despath );
}
String temppath = despath + @ "tempdespathcache \";
If (system. Io. Directory. exists (temppath ))
{
System. Io. Directory. Delete (temppath, true );
System. Io. Directory. createdirectory (temppath );
}
Else
System. Io. Directory. createdirectory (temppath );
If (! System. Io. file. exists (despath + "updateconfig. xml "))
{
System. xml. xmldocument updateconfig = new system. xml. xmldocument ();
Updateconfig. loadxml (@ "<root> </root> ");
Updateconfig. Save (despath + "updateconfig. xml ");
}
# Endregion
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)
{
// Find the corresponding module
If (localnode. childnodes [0]. innertext = servernode. childnodes [0]. innertext)
{
Moduleexist = true;
// Judge the version number
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;
}
}
// The corresponding module is not found.
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 );
}
}
}
// Write the new updateconfig. xml file and replace it after upgrade.
If (newversionexist)
{
Serverxmldoc. Save (temppath + "updateconfig. xml ");
If (dialogresult. Yes = MessageBox. Show ("Is there a new version, update? "," Prompt ", 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: supports backing up previous versions
System. Io. file. Delete (despath + filename );
}
// Todo: if the system is running, you must stop the system. You can use system. Diagnostics. Process to stop the system.
System. Io. file. Move (Dir, despath + filename );
}
MessageBox. Show ("upgraded ");
}
Else
{
// Todo: supports upgrading again
}
}
}
Catch (exception ex)
{
Throw new exception ("upgrade failed because:" + ex. Message, ex );
}
}
// Download the latest file
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 ("Download failed because:" + ex. Message, ex );
}
}