Exemplo n.º 1
0
        private static void CheckForUpdates(UpdateCheckInfo info, bool auto)
        {
            try
            {
                if (!ApplicationDeployment.IsNetworkDeployed)
                {
                    if (!auto)
                    {
                        Popup.Show(
                            $"{Resources.AppName} was not installed via ClickOnce and cannot be updated automatically.",
                            image: MessageBoxImage.Error);
                    }
                    return;
                }

                if (info == null)
                {
                    if (!auto)
                    {
                        Popup.Show(
                            "An error occurred while trying to check for updates.", image: MessageBoxImage.Error);
                    }
                    return;
                }

                Settings.Default.LastUpdateCheck = DateTime.Now;
                if (info.UpdateAvailable && !(Settings.Default.UpdateBranch != UpdateBranch.Beta &&
                                              info.AvailableVersion.Minor == Settings.Default.BetaVersion) &&
                    !(AssemblyInfo.Version.Major != ForgetUpdateVersion.Major &&
                      ForgetUpdateVersion.Major == info.AvailableVersion.Major))
                {
                    if (auto && info.AvailableVersion == ForgetUpdateVersion)
                    {
                        return;
                    }
                    var ad = ApplicationDeployment.CurrentDeployment;
                    ad.UpdateCompleted += delegate
                    {
                        var args = new List <string>();
                        if (auto && Settings.Default.AutoUpdate)
                        {
                            args.Add("updatingsilent");
                        }
                        else
                        {
                            args.Add("updating");
                        }
                        AppHelper.RestartApplication(args);
                    };
                    if (auto && Settings.Default.AutoUpdate)
                    {
                        try
                        {
                            ad.UpdateAsync();
                        }
                        catch
                        {
                            // ignored
                        }
                        return;
                    }

                    if (auto)
                    {
                        if (Settings.Default.UpdateWaiting != info.AvailableVersion)
                        {
                            Settings.Default.UpdateWaiting = info.AvailableVersion;
                            TrayIconHelper.ShowBalloon(
                                $"Update available ({info.AvailableVersion})\nClick to view details",
                                BalloonIcon.Info);
                        }
                    }
                    else
                    {
                        App.UpdateScheduler?.Stop();

                        var updateDialog = new UpdatePrompt(info.AvailableVersion, info.IsUpdateRequired);
                        updateDialog.ShowDialog();
                        updateDialog.Activate();

                        switch (updateDialog.SelectedUpdateMode)
                        {
                        case UpdatePrompt.UpdateMode.RemindNever:
                            Settings.Default.ForgetUpdateVersion = info.AvailableVersion;
                            break;

                        case UpdatePrompt.UpdateMode.UpdateNow:
                            try
                            {
                                var progressDialog = new UpdateProgress(info.AvailableVersion);
                                ad.UpdateProgressChanged +=
                                    delegate(object sender, DeploymentProgressChangedEventArgs args)
                                {
                                    if (args.State == DeploymentProgressState.DownloadingApplicationFiles)
                                    {
                                        progressDialog.CurrentProgress = args.ProgressPercentage;
                                    }
                                };
                                progressDialog.Show();
                                progressDialog.Activate();
                                ad.UpdateAsync();
                            }
                            catch (DeploymentDownloadException dde)
                            {
                                Popup.Show(
                                    $"Failed to download the latest version.\nPlease check your network connection, or try again later.\n\nError: {dde}",
                                    image: MessageBoxImage.Error);
                            }
                            break;
                        }

                        App.UpdateScheduler?.Start();
                    }
                }
                else
                {
                    if (!auto)
                    {
                        Popup.Show($"You have the latest version ({AssemblyInfo.Version}).");
                    }
                }
            }
            catch (Exception)
            {
                if (!auto)
                {
                    throw;
                }
            }
        }