基本信息
源码名称:c# winform 自动升级程序源码下载
源码大小:0.12M
文件格式:.zip
开发语言:C#
更新时间:2016-01-20
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):78630559
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
#region The delegate
public delegate void ShowHandler();
#endregion
public class AutoUpdater : IAutoUpdater
{
#region The private fields
private Config config = null;
private bool bNeedRestart = false;
private bool bDownload = false;
List<DownloadFileInfo> downloadFileListTemp = null;
#endregion
#region The public event
public event ShowHandler OnShow;
#endregion
#region The constructor of AutoUpdater
public AutoUpdater()
{
config = Config.LoadConfig(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ConstFile.FILENAME));
}
#endregion
#region The public method
public void Update()
{
if (!config.Enabled)
return;
Dictionary<string, RemoteFile> listRemotFile = ParseRemoteXml(config.ServerUrl);
List<DownloadFileInfo> downloadList = new List<DownloadFileInfo>();
foreach (LocalFile file in config.UpdateFileList)
{
if (listRemotFile.ContainsKey(file.Path))
{
RemoteFile rf = listRemotFile[file.Path];
Version v1 = new Version(rf.LastVer);
Version v2 = new Version(file.LastVer);
if (v1 > v2)
{
downloadList.Add(new DownloadFileInfo(rf.Url, file.Path, rf.LastVer, rf.Size));
file.LastVer = rf.LastVer;
file.Size = rf.Size;
if (rf.NeedRestart)
bNeedRestart = true;
bDownload = true;
}
listRemotFile.Remove(file.Path);
}
}
foreach (RemoteFile file in listRemotFile.Values)
{
downloadList.Add(new DownloadFileInfo(file.Url, file.Path, file.LastVer, file.Size));
if (file.NeedRestart)
bNeedRestart = true;
}
downloadFileListTemp = downloadList;
if (bDownload)
{
DownloadConfirm dc = new DownloadConfirm(downloadList);
if (this.OnShow != null)
this.OnShow();
if (DialogResult.OK == dc.ShowDialog())
{
StartDownload(downloadList);
}
}
}
public void RollBack()
{
foreach (DownloadFileInfo file in downloadFileListTemp)
{
string tempUrlPath = CommonUnitity.GetFolderUrl(file);
string oldPath = string.Empty;
try
{
if (!string.IsNullOrEmpty(tempUrlPath))
{
oldPath = Path.Combine(CommonUnitity.SystemBinUrl tempUrlPath.Substring(1), file.FileName);
}
else
{
oldPath = Path.Combine(CommonUnitity.SystemBinUrl, file.FileName);
}
if (oldPath.EndsWith("_"))
oldPath = oldPath.Substring(0, oldPath.Length - 1);
MoveFolderToOld(oldPath ".old", oldPath);
}
catch (Exception ex)
{
//log the error message,you can use the application's log code
}
}
}
#endregion
#region The private method
string newfilepath = string.Empty;
private void MoveFolderToOld(string oldPath, string newPath)
{
if (File.Exists(oldPath) && File.Exists(newPath))
{
System.IO.File.Copy(oldPath, newPath, true);
}
}
private void StartDownload(List<DownloadFileInfo> downloadList)
{
DownloadProgress dp = new DownloadProgress(downloadList);
if (dp.ShowDialog() == DialogResult.OK)
{
//
if (DialogResult.Cancel == dp.ShowDialog())
{
return;
}
//Update successfully
config.SaveConfig(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ConstFile.FILENAME));
if (bNeedRestart)
{
//Delete the temp folder
Directory.Delete(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ConstFile.TEMPFOLDERNAME), true);
MessageBox.Show(ConstFile.APPLYTHEUPDATE, ConstFile.MESSAGETITLE, MessageBoxButtons.OK, MessageBoxIcon.Information);
CommonUnitity.RestartApplication();
}
}
}
private Dictionary<string, RemoteFile> ParseRemoteXml(string xml)
{
XmlDocument document = new XmlDocument();
document.Load(xml);
Dictionary<string, RemoteFile> list = new Dictionary<string, RemoteFile>();
foreach (XmlNode node in document.DocumentElement.ChildNodes)
{
list.Add(node.Attributes["path"].Value, new RemoteFile(node));
}
return list;
}
#endregion
}