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;
+ }
+ }
+ }
+}