You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
5.4 KiB
134 lines
5.4 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using System.Xml;
|
|
|
|
namespace PunchAndWeld
|
|
{
|
|
public class AutoUpdater
|
|
{
|
|
private string _serverUrl;
|
|
private string _softwareName;
|
|
private string _newVersion;
|
|
private string _filePath;
|
|
private string _fileName;
|
|
private string _lastUpdateTime;
|
|
private string _desc;
|
|
|
|
public bool CheckUpdateLoad(string serverUrl, string updateXmlFileName)
|
|
{
|
|
bool result = false;
|
|
_serverUrl = serverUrl;
|
|
try
|
|
{
|
|
if (CheckUpdate(serverUrl, updateXmlFileName))
|
|
{
|
|
var sb = new StringBuilder();
|
|
sb.AppendLine("当前版本:" + Assembly.LoadFrom(_softwareName).GetName().Version);
|
|
sb.AppendLine("检查到新版本:" + _newVersion);
|
|
sb.AppendLine("更新时间:" + _lastUpdateTime);
|
|
sb.AppendLine("更新说明:" + _desc);
|
|
sb.AppendLine();
|
|
sb.AppendLine("是否更新?");
|
|
//var form = new FormFoundUpdate(sb.ToString());
|
|
DialogResult result1 = MessageBox.Show("是否更新程序!", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
|
|
if (result1 == DialogResult.Yes)
|
|
{
|
|
var path = Application.StartupPath;
|
|
var args = new StringBuilder();
|
|
args.Append("\'" + _serverUrl + "\',");
|
|
args.Append("\'" + _softwareName + "\',");
|
|
args.Append("\'" + _newVersion + "\',");
|
|
args.Append("\'" + _filePath + "\',");
|
|
args.Append("\'" + _fileName + "\',");
|
|
args.Append("\'" + _lastUpdateTime + "\',");
|
|
args.Append("\'" + _desc + "\',");
|
|
//args.Append("\'{_softwareName}\',");
|
|
//args.Append("\'{_newVersion}\',");
|
|
//args.Append("\'{_filePath}\',");
|
|
//args.Append("\'{_fileName}\',");
|
|
//args.Append("\'{_lastUpdateTime}\',");
|
|
//args.Append("\'{_desc}\'");
|
|
|
|
var process = new System.Diagnostics.Process
|
|
{
|
|
StartInfo =
|
|
{
|
|
FileName = "Updater.exe",
|
|
WorkingDirectory = path,
|
|
CreateNoWindow = true,
|
|
Arguments = args.ToString(),
|
|
}
|
|
};
|
|
process.Start();
|
|
result = true;
|
|
}
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message);
|
|
result = false;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
private bool CheckUpdate(string serverUrl, string updateXmlFileName)
|
|
{
|
|
|
|
var fullFileName = serverUrl + updateXmlFileName;
|
|
try
|
|
{
|
|
var wc = new WebClient();
|
|
var stream = wc.OpenRead(fullFileName);
|
|
//http://127.0.0.1/PcUpdate.xml
|
|
var xmlDoc = new XmlDocument();
|
|
if (stream != null) xmlDoc.Load(stream);
|
|
XmlNode rootNode = xmlDoc.SelectSingleNode("AutoUpdate");
|
|
if (rootNode != null)
|
|
foreach (XmlNode node in rootNode.ChildNodes.Cast<XmlNode>().Where(node => node.Name == "SoftWare"))
|
|
{
|
|
if (node.Attributes != null) _softwareName = node.Attributes["Name"].Value;
|
|
foreach (XmlNode n in node.ChildNodes)
|
|
{
|
|
switch (n.Name)
|
|
{
|
|
case "Version":
|
|
_newVersion = n.InnerText;
|
|
break;
|
|
case "FilePath":
|
|
_filePath = n.InnerText;
|
|
break;
|
|
case "FileName":
|
|
_fileName = n.InnerText;
|
|
break;
|
|
case "LastUpdateTime":
|
|
_lastUpdateTime = n.InnerText;
|
|
break;
|
|
case "Desc":
|
|
_desc = n.InnerText;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
Version newVersion = new Version(_newVersion);
|
|
Version oldVersion = Assembly.LoadFrom(_softwareName).GetName().Version;
|
|
var tm = oldVersion.CompareTo(newVersion);
|
|
|
|
var hasUpdate = tm < 0;
|
|
return hasUpdate;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new Exception("更新出现错误,请确认网络连接无误后重试!\n{fullFileName}\n{ex.Message}");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|