diff --git a/Common.csproj b/Common.csproj index d693b1e..e103dee 100644 --- a/Common.csproj +++ b/Common.csproj @@ -141,6 +141,7 @@ + @@ -162,6 +163,8 @@ + + diff --git a/Update/UpdateCheck.cs b/Update/UpdateCheck.cs new file mode 100644 index 0000000..710f49b --- /dev/null +++ b/Update/UpdateCheck.cs @@ -0,0 +1,66 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Net; +using System.Reflection; +using System.Threading.Tasks; + +namespace Common.Update +{ + public static class UpdateCheck + { + private static string _server; + + public static VersionInfo VersionInfo { get; private set; } + public static string LocalInstallFile { get; private set; } + public static bool UpdateAvailable { get; private set; } + + public static Version CurrentVersion + { + get { return Assembly.GetExecutingAssembly().GetName().Version; } + } + + public static bool CheckForUpdate(string server, string file) + { + _server = server; + + VersionInfo = VersionInfo.Load(_server, file); + + if (VersionInfo == null) + return false; + + var serverVersion = VersionInfo.Version; + var localVersion = CurrentVersion; + + UpdateAvailable = serverVersion > localVersion; + + return true; + } + + public static async Task DownloadUpdate() + { + if (VersionInfo == null) + return false; + + var remoteFile = _server + VersionInfo.InstallFile; + + LocalInstallFile = Path.Combine(Path.GetTempPath(), VersionInfo.InstallFile); + + var webClient = new WebClient(); + + await webClient.DownloadFileTaskAsync(new Uri(remoteFile), LocalInstallFile); + + return true; + } + + public static bool InstallUpdate() + { + if (VersionInfo == null) + return false; + + Process.Start(LocalInstallFile, "/passive"); + + return true; + } + } +} diff --git a/Update/VersionInfo.cs b/Update/VersionInfo.cs new file mode 100644 index 0000000..e81e391 --- /dev/null +++ b/Update/VersionInfo.cs @@ -0,0 +1,48 @@ +using Common.Debug; +using System; +using System.Xml.Linq; + +namespace Common.Update +{ + public class VersionInfo + { + public Version Version { get; set; } + public string InstallFile { get; set; } + public DateTime InstallCreated { get; set; } + + public static VersionInfo Load(string server, string file) + { + try + { + var document = XDocument.Load(server + file); + + var versionInformationElement = document.Element("versionInformation"); + + if (versionInformationElement == null) + return null; + + var versionElement = versionInformationElement.Element("version"); + var installFileElement = versionInformationElement.Element("installFile"); + var installCreatedElement = versionInformationElement.Element("installCreated"); + + if (versionElement == null || installFileElement == null || installCreatedElement == null) + return null; + + var versionInfo = new VersionInfo + { + Version = Version.Parse(versionElement.Value), + InstallFile = installFileElement.Value, + InstallCreated = DateTime.Parse(installCreatedElement.Value) + }; + + return versionInfo; + } + catch (Exception exception) + { + Tracer.WriteException(exception); + + return null; + } + } + } +}