public Task <UpdateResult> UpdateAsync() { return(Task.Run <UpdateResult>(() => { try { WaitForInitializationToComplete(); var ext = Path.GetExtension(_installerLocation); var tempFile = Path.ChangeExtension(Path.GetTempFileName(), ext); if (!CopyFile(_installerLocation, tempFile)) { return UpdateResult.DownloadFailed; } using (var trustVerifier = new TrustVerifier(tempFile)) { if (!trustVerifier.IsVerified) { return UpdateResult.VerificationFailed; } UpdateMethods.BeginMSIInstall(tempFile); } return UpdateResult.Success; } catch (Exception e) { e.ReportException(); return UpdateResult.Unknown; } })); }
private AutoUpdateOption Initialize() { // Do NOT use anything that calls WaitForInitializationToComplete in this // method, or you may create a deadlock condition try { OverridableConfig config = new OverridableConfig(ConfigFile); _releaseLocation = UpdateMethods.GetReleaseLocation(config); _metaMSISettings = UpdateMethods.ExtractMSIInfo(_releaseLocation); if (_metaMSISettings == null) { // silently ignore System.Diagnostics.Trace.WriteLine($"Unable to get update info from meta file at {_releaseLocation}"); return(AutoUpdateOption.Unknown); } _installerLocation = _metaMSISettings.GetMSIPathSafely(_releaseLocation); #pragma warning disable CA1806 // Do not ignore method results Version.TryParse(_metaMSISettings.Version, out _latestVersion); Version.TryParse(_metaMSISettings.MinimumVersion, out _minimumVersion); Version.TryParse(UpdateMethods.GetInstalledProductVersion(), out _installedVersion); #pragma warning restore CA1806 // Do not ignore method results if (_installedVersion != null && _latestVersion != null && _minimumVersion != null) { if (_latestVersion < _minimumVersion) { return(AutoUpdateOption.Unknown); } if (_installedVersion < _minimumVersion) { return(AutoUpdateOption.RequiredUpgrade); } else if (_installedVersion < _latestVersion) { return(AutoUpdateOption.OptionalUpgrade); } return(AutoUpdateOption.Current); } } catch (Exception e) { e.ReportException(); } return(AutoUpdateOption.Unknown); // Our fallback value if we can't prove a better option }