private void TimerCallback(object unusedState) { string errorMessage = null; using (ITracer activity = this.tracer.StartActivity("Checking for product upgrades.", EventLevel.Informational)) { try { ProductUpgraderInfo info = new ProductUpgraderInfo( this.tracer, this.fileSystem); // The upgrade check always goes against GitHub GitHubUpgrader productUpgrader = GitHubUpgrader.Create( this.tracer, this.fileSystem, dryRun: false, noVerify: false, error: out errorMessage); if (productUpgrader == null) { string message = string.Format( "{0}.{1}: GitHubUpgrader.Create failed to create upgrader: {2}", nameof(ProductUpgradeTimer), nameof(this.TimerCallback), errorMessage); activity.RelatedWarning( metadata: new EventMetadata(), message: message, keywords: Keywords.Telemetry); info.RecordHighestAvailableVersion(highestAvailableVersion: null); return; } InstallerPreRunChecker prerunChecker = new InstallerPreRunChecker(this.tracer, string.Empty); if (!prerunChecker.TryRunPreUpgradeChecks(out errorMessage)) { string message = string.Format( "{0}.{1}: PreUpgradeChecks failed with: {2}", nameof(ProductUpgradeTimer), nameof(this.TimerCallback), errorMessage); activity.RelatedWarning( metadata: new EventMetadata(), message: message, keywords: Keywords.Telemetry); info.RecordHighestAvailableVersion(highestAvailableVersion: null); return; } if (!productUpgrader.UpgradeAllowed(out errorMessage)) { errorMessage = errorMessage ?? $"{nameof(ProductUpgradeTimer)}.{nameof(this.TimerCallback)}: Upgrade is not allowed, but no reason provided."; activity.RelatedWarning( metadata: new EventMetadata(), message: errorMessage, keywords: Keywords.Telemetry); info.RecordHighestAvailableVersion(highestAvailableVersion: null); return; } if (!this.TryQueryForNewerVersion( activity, productUpgrader, out Version newerVersion, out errorMessage)) { string message = string.Format( "{0}.{1}: TryQueryForNewerVersion failed with: {2}", nameof(ProductUpgradeTimer), nameof(this.TimerCallback), errorMessage); activity.RelatedWarning( metadata: new EventMetadata(), message: message, keywords: Keywords.Telemetry); info.RecordHighestAvailableVersion(highestAvailableVersion: null); return; } info.RecordHighestAvailableVersion(highestAvailableVersion: newerVersion); } catch (Exception ex) when( ex is IOException || ex is UnauthorizedAccessException || ex is NotSupportedException) { this.tracer.RelatedWarning( CreateEventMetadata(ex), "Exception encountered recording highest available version"); } catch (Exception ex) { this.tracer.RelatedError( CreateEventMetadata(ex), "Unhanlded exception encountered recording highest available version"); Environment.Exit((int)ReturnCode.GenericError); } } }