private static object CheckUpdate(Assembly mainAssembly) { var companyAttribute = (AssemblyCompanyAttribute)GetAttribute(mainAssembly, typeof(AssemblyCompanyAttribute)); string appCompany = companyAttribute != null ? companyAttribute.Company : ""; if (string.IsNullOrEmpty(AppTitle)) { var titleAttribute = (AssemblyTitleAttribute)GetAttribute(mainAssembly, typeof(AssemblyTitleAttribute)); AppTitle = titleAttribute != null ? titleAttribute.Title : mainAssembly.GetName().Name; } string registryLocation = !string.IsNullOrEmpty(appCompany) ? $@"Software\{appCompany}\{AppTitle}\AutoUpdater" : $@"Software\{AppTitle}\AutoUpdater"; BaseUri = new Uri(AppCastURL); UpdateInfoEventArgs args; using (MyWebClient client = GetWebClient(BaseUri, BasicAuthXML)) { string xml = client.DownloadString(BaseUri); if (ParseUpdateInfoEvent == null) { XmlSerializer xmlSerializer = new XmlSerializer(typeof(UpdateInfoEventArgs)); XmlTextReader xmlTextReader = new XmlTextReader(new StringReader(xml)) { XmlResolver = null }; args = (UpdateInfoEventArgs)xmlSerializer.Deserialize(xmlTextReader); } else { ParseUpdateInfoEventArgs parseArgs = new ParseUpdateInfoEventArgs(xml); ParseUpdateInfoEvent(parseArgs); args = parseArgs.UpdateInfo; } } if (string.IsNullOrEmpty(args.CurrentVersion) || string.IsNullOrEmpty(args.DownloadURL)) { throw new MissingFieldException(); } args.InstalledVersion = InstalledVersion != null ? InstalledVersion : mainAssembly.GetName().Version; args.IsUpdateAvailable = new Version(args.CurrentVersion) > args.InstalledVersion; return(args); }
private static object CheckUpdate(Assembly mainAssembly) { var companyAttribute = (AssemblyCompanyAttribute)GetAttribute(mainAssembly, typeof(AssemblyCompanyAttribute)); string appCompany = companyAttribute != null ? companyAttribute.Company : ""; if (string.IsNullOrEmpty(AppTitle)) { var titleAttribute = (AssemblyTitleAttribute)GetAttribute(mainAssembly, typeof(AssemblyTitleAttribute)); AppTitle = titleAttribute != null ? titleAttribute.Title : mainAssembly.GetName().Name; } string registryLocation = !string.IsNullOrEmpty(appCompany) ? $@"Software\{appCompany}\{AppTitle}\AutoUpdater" : $@"Software\{AppTitle}\AutoUpdater"; if (PersistenceProvider == null) { PersistenceProvider = new RegistryPersistenceProvider(registryLocation); } BaseUri = new Uri(AppCastURL); UpdateInfoEventArgs args; using (MyWebClient client = GetWebClient(BaseUri, BasicAuthXML)) { string xml = client.DownloadString(BaseUri); if (ParseUpdateInfoEvent == null) { XmlSerializer xmlSerializer = new XmlSerializer(typeof(UpdateInfoEventArgs)); XmlTextReader xmlTextReader = new XmlTextReader(new StringReader(xml)) { XmlResolver = null }; args = (UpdateInfoEventArgs)xmlSerializer.Deserialize(xmlTextReader); } else { ParseUpdateInfoEventArgs parseArgs = new ParseUpdateInfoEventArgs(xml); ParseUpdateInfoEvent(parseArgs); args = parseArgs.UpdateInfo; } } if (string.IsNullOrEmpty(args.CurrentVersion) || string.IsNullOrEmpty(args.DownloadURL)) { throw new MissingFieldException(); } args.InstalledVersion = mainAssembly.GetName().Version; args.IsUpdateAvailable = new Version(args.CurrentVersion) > mainAssembly.GetName().Version; if (!Mandatory) { if (string.IsNullOrEmpty(args.Mandatory.MinimumVersion) || args.InstalledVersion < new Version(args.Mandatory.MinimumVersion)) { Mandatory = args.Mandatory.Value; UpdateMode = args.Mandatory.UpdateMode; } } if (Mandatory) { ShowRemindLaterButton = false; ShowSkipButton = false; } else { // Read the persisted state from the persistence provider. // This method makes the persistence handling independent from the storage method. var skippedVersion = PersistenceProvider.GetSkippedVersion(); if (skippedVersion != null) { var currentVersion = new Version(args.CurrentVersion); if (currentVersion <= skippedVersion) { return(null); } if (currentVersion > skippedVersion) { // Update the persisted state. Its no longer makes sense to have this flag set as we are working on a newer application version. PersistenceProvider.SetSkippedVersion(null); } } var remindLaterAt = PersistenceProvider.GetRemindLater(); if (remindLaterAt != null) { int compareResult = DateTime.Compare(DateTime.Now, remindLaterAt.Value); if (compareResult < 0) { return(remindLaterAt.Value); } } } return(args); }
private static void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e) { Assembly mainAssembly = e.Argument as Assembly; var companyAttribute = (AssemblyCompanyAttribute)GetAttribute(mainAssembly, typeof(AssemblyCompanyAttribute)); string appCompany = companyAttribute != null ? companyAttribute.Company : ""; if (string.IsNullOrEmpty(AppTitle)) { var titleAttribute = (AssemblyTitleAttribute)GetAttribute(mainAssembly, typeof(AssemblyTitleAttribute)); AppTitle = titleAttribute != null ? titleAttribute.Title : mainAssembly.GetName().Name; } RegistryLocation = !string.IsNullOrEmpty(appCompany) ? $@"Software\{appCompany}\{AppTitle}\AutoUpdater" : $@"Software\{AppTitle}\AutoUpdater"; BaseUri = new Uri(AppCastURL); UpdateInfoEventArgs args; using (MyWebClient client = GetWebClient(BaseUri, BasicAuthXML)) { string xml = client.DownloadString(BaseUri); if (ParseUpdateInfoEvent == null) { XmlSerializer xmlSerializer = new XmlSerializer(typeof(UpdateInfoEventArgs)); XmlTextReader xmlTextReader = new XmlTextReader(new StringReader(xml)) { XmlResolver = null }; args = (UpdateInfoEventArgs)xmlSerializer.Deserialize(xmlTextReader); } else { ParseUpdateInfoEventArgs parseArgs = new ParseUpdateInfoEventArgs(xml); ParseUpdateInfoEvent(parseArgs); args = parseArgs.UpdateInfo; } } if (!Mandatory) { Mandatory = args.Mandatory; UpdateMode = args.UpdateMode; } if (string.IsNullOrEmpty(args.CurrentVersion) || string.IsNullOrEmpty(args.DownloadURL)) { throw new InvalidDataException(); } if (Mandatory) { ShowRemindLaterButton = false; ShowSkipButton = false; } else { using (RegistryKey updateKey = Registry.CurrentUser.OpenSubKey(RegistryLocation)) { if (updateKey != null) { object skip = updateKey.GetValue("skip"); object applicationVersion = updateKey.GetValue("version"); if (skip != null && applicationVersion != null) { Version currentVersion = new Version(args.CurrentVersion); string skipValue = skip.ToString(); var skipVersion = new Version(applicationVersion.ToString()); if (skipValue.Equals("1") && currentVersion <= skipVersion) { return; } if (currentVersion > skipVersion) { using (RegistryKey updateKeyWrite = Registry.CurrentUser.CreateSubKey(RegistryLocation)) { if (updateKeyWrite != null) { updateKeyWrite.SetValue("version", currentVersion.ToString()); updateKeyWrite.SetValue("skip", 0); } } } } object remindLaterTime = updateKey.GetValue("remindlater"); if (remindLaterTime != null) { DateTime remindLater = Convert.ToDateTime(remindLaterTime.ToString(), CultureInfo.CreateSpecificCulture("en-US").DateTimeFormat); int compareResult = DateTime.Compare(DateTime.Now, remindLater); if (compareResult < 0) { e.Result = remindLater; return; } } } } } args.InstalledVersion = mainAssembly.GetName().Version; args.IsUpdateAvailable = new Version(args.CurrentVersion) > mainAssembly.GetName().Version; e.Result = args; }