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