private static void ExecuteTryUpdateScheduledTask(string v1TaskName, SchedulerManager sm)
        {
            try
            {
                sm.DeleteTask(v1TaskName);

                if (!sm.TaskIsSet())
                    sm.InstallTask();
                else
                    sm.CheckConsistency();
            }
            catch (Exception ex) { MessageBox.Show($"There was an error: [{ex.Message}]", Branding.MessageBoxHeader); };
        }
        static public void ProcessSingleTask()
        {
            if (HasDeleteTaskOption)
            {
                SchedulerManager sm = new SchedulerManager();
                if (sm.TaskIsSet())
                {
                    var result = App.CommandLineOptions.AskDeleteTask ?
                                 MessageBox.Show($"You have a scheduled task to check for updates of {Branding.TargetProduct}.{Environment.NewLine + Environment.NewLine}Do you want to remove this scheduled task?", Branding.MessageBoxHeader, MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Yes) :
                                 MessageBoxResult.Yes;

                    if (result == MessageBoxResult.Yes)
                    {
                        sm.DeleteTask();

                        if (!App.CommandLineOptions.SilentlyDeleteTask)
                        {
                            MessageBox.Show("Scheduled task has been removed successfully", Branding.MessageBoxHeader, MessageBoxButton.OK, MessageBoxImage.Information);
                        }
                    }
                }
            }

            if (HasSetTaskOption)
            {
                SchedulerManager sm = new SchedulerManager();

                // re-create the task without asking
                if (App.CommandLineOptions.ForceSetTask)
                {
                    sm.ForceReInstallTask();
                }

                // ask if task is present and not-consistent, otherwise create it silently
                if (App.CommandLineOptions.SetTaskAskIfNonConsistent)
                {
                    if (sm.TaskIsSet())
                    {
                        sm.CheckConsistency();
                    }
                    else
                    {
                        sm.ForceReInstallTask();
                    }
                }
            }
        }
        public static void UpgradeAppSettings()
        {
            try
            {
                //MessageBox.Show(Assembly.GetExecutingAssembly().GetName().Version.ToString());
                //MessageBox.Show(Settings.Default.SettingsUpgradeRequired.ToString());

                // 1. Upgrade settings
                if (Settings.Default.SettingsUpgradeRequired)
                {
                    // we had "FirstSilentRunMessageHasBeenDisplayed" // "SettingsUpgradeComplete_from_V1" settings in v. 2.0.0.0 release but not in v.1.0.0.0
                    // if at least one is present in previous version - we may upgrade settings
                    bool previousVersionWasAtLeast2000 = false;
                    if (
                        Settings.Default.GetPreviousVersion("FirstSilentRunMessageHasBeenDisplayed") != null ||
                        Settings.Default.GetPreviousVersion("SettingsUpgradeComplete_from_V1") != null
                        )
                        previousVersionWasAtLeast2000 = true;

                    // if previous version was at least 2.0.0.0 - we may proceed
                    if (previousVersionWasAtLeast2000)
                    {
                        Version previousFormatVersion = null;

                        // some boilerplate code for future releases
                        if (Settings.Default.GetPreviousVersion("SettingsFormatVersion") != null)
                        {
                            string _previousFormatVersion = Settings.Default.GetPreviousVersion("SettingsFormatVersion") as string;
                            previousFormatVersion = new Version(_previousFormatVersion);

                            System.Diagnostics.Debug.WriteLine("Upgrading settings from previous version " + previousFormatVersion.ToString());
                            //MessageBox.Show("Your settings had been updated from previous version", Branding.MessageBoxHeader);

                        }

                        // we should upgrade anyway if previous >= 2.0.0.0
                        Settings.Default.Upgrade();

                        // one-time highlighting during upgrade
                        if ((previousFormatVersion??(new Version("2.0.2.0"))) < new Version("2.0.2.0"))
                        {
                            Settings.Default.lblHelpContextRequiresHighlighting = true;
                        }
                    }

                    // update not required any more
                    Settings.Default.SettingsUpgradeRequired = false;
                    // we must explicitly store current version for it to be available for future upgrades
                    Settings.Default.SettingsFormatVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString();
                    // finally, save settings
                    Settings.Default.Save();

                }


                // 2. Upgrade scheduled tasks
                if (!Settings.Default.SettingsUpgradeComplete_from_V1)
                {
                    const string v1TaskName = "AdoptOpenJDK_UpdateWatcher";

                    SchedulerManager sm = new SchedulerManager();

                    if (sm.TaskIsSet(v1TaskName))
                    {
                        if (MessageBox.Show(
                            $"{Branding.ProductName} has detected that you have scheduled 'check for updates' task from version 1." + Environment.NewLine + Environment.NewLine +
                            "It is suggested to remove it and create new task." + Environment.NewLine + Environment.NewLine +
                            "Would you like to do it? [Recommended]",
                            $"Upgrade to v.{Assembly.GetExecutingAssembly().GetName().Version} - {Branding.MessageBoxHeader}", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Yes)
                            == MessageBoxResult.Yes)
                        {
                            ExecuteTryUpdateScheduledTask(v1TaskName, sm);
                        }
                        else
                            if (MessageBox.Show(
                            $"In is highly important that the scheduled task will be upgraded. We ask you to reconsider your choice." + Environment.NewLine + Environment.NewLine +
                            "Yes = Please upgrade" + Environment.NewLine +
                            "No  = Keep as is. I'm really sure what I'm doing and I will take full responsibility for upcoming errors.",
                            $"Upgrade to v.{Assembly.GetExecutingAssembly().GetName().Version} - {Branding.MessageBoxHeader}", MessageBoxButton.YesNo, MessageBoxImage.Exclamation, MessageBoxResult.Yes)
                            == MessageBoxResult.Yes)
                        {
                            ExecuteTryUpdateScheduledTask(v1TaskName, sm);
                        }
                    }

                    Settings.Default.SettingsUpgradeComplete_from_V1 = true;
                    Settings.Default.Save();

                }
            }
            catch (Exception ex) { MessageBox.Show($"There was an error: [{ex.Message}]", Branding.MessageBoxHeader); };
        }