private static void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e) { var mainAssembly = Assembly.GetEntryAssembly(); var companyAttribute = (AssemblyCompanyAttribute) GetAttribute(mainAssembly, typeof (AssemblyCompanyAttribute)); var titleAttribute = (AssemblyTitleAttribute) GetAttribute(mainAssembly, typeof (AssemblyTitleAttribute)); AppTitle = titleAttribute != null ? titleAttribute.Title : mainAssembly.GetName().Name; var appCompany = companyAttribute != null ? companyAttribute.Company : ""; RegistryLocation = !string.IsNullOrEmpty(appCompany) ? string.Format(@"Software\{0}\{1}\AutoUpdater", appCompany, AppTitle) : string.Format(@"Software\{0}\AutoUpdater", AppTitle); RegistryKey updateKey = Registry.CurrentUser.OpenSubKey(RegistryLocation); if (updateKey != null) { object remindLaterTime = updateKey.GetValue("remindlater"); if (remindLaterTime != null) { DateTime remindLater = Convert.ToDateTime(remindLaterTime.ToString(), CultureInfo.CreateSpecificCulture("en-US")); int compareResult = DateTime.Compare(DateTime.Now, remindLater); if (compareResult < 0) { var updateForm = new UpdateForm(true); updateForm.SetTimer(remindLater); return; } } } InstalledVersion = mainAssembly.GetName().Version; WebRequest webRequest = WebRequest.Create(AppCastURL); webRequest.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore); WebResponse webResponse; try { webResponse = webRequest.GetResponse(); } catch (Exception) { return; } Stream appCastStream = webResponse.GetResponseStream(); var receivedAppCastDocument = new XmlDocument(); if (appCastStream != null) receivedAppCastDocument.Load(appCastStream); else return; XmlNodeList appCastItems = receivedAppCastDocument.SelectNodes("item"); if (appCastItems != null) foreach (XmlNode item in appCastItems) { XmlNode appCastVersion = item.SelectSingleNode("version"); if (appCastVersion != null) { String appVersion = appCastVersion.InnerText; var version = new Version(appVersion); if (version <= InstalledVersion) continue; CurrentVersion = version; } else continue; XmlNode appCastTitle = item.SelectSingleNode("title"); DialogTitle = appCastTitle != null ? appCastTitle.InnerText : ""; XmlNode appCastChangeLog = item.SelectSingleNode("changelog"); ChangeLogURL = appCastChangeLog != null ? appCastChangeLog.InnerText : ""; XmlNode appCastUrl = item.SelectSingleNode("url"); DownloadURL = appCastUrl != null ? appCastUrl.InnerText : ""; } if (updateKey != null) { object skip = updateKey.GetValue("skip"); object applicationVersion = updateKey.GetValue("version"); if (skip != null && applicationVersion != null) { string skipValue = skip.ToString(); var skipVersion = new Version(applicationVersion.ToString()); if (skipValue.Equals("1") && CurrentVersion <= skipVersion) return; if (CurrentVersion > skipVersion) { RegistryKey updateKeyWrite = Registry.CurrentUser.CreateSubKey(RegistryLocation); if (updateKeyWrite != null) { updateKeyWrite.SetValue("version", CurrentVersion.ToString()); updateKeyWrite.SetValue("skip", 0); } } } updateKey.Close(); } if (CurrentVersion == null) return; if (CurrentVersion > InstalledVersion) { var thread = new Thread(ShowUI); thread.CurrentCulture = thread.CurrentUICulture = CurrentCulture ?? System.Windows.Forms.Application.CurrentCulture; thread.SetApartmentState(ApartmentState.STA); thread.Start(); } }
private static void ShowUI() { var updateForm = new UpdateForm(); updateForm.ShowDialog(); }