Как избежать перезапуска приложения c # после переноса пользовательских настроек - PullRequest
0 голосов
/ 25 января 2019

Когда создается новая версия моего приложения, пользовательские настройки автоматически определяют необходимость обновления, я использую следующее для обновления и сохранения изменений:

    static bool UpgradeUserSettings()
    {
        if (Settings.Default.UpgradeRequired)
        {
            Settings.Default.Upgrade();
            Settings.Default.UpgradeRequired = false;
            Settings.Default.AppUpgradeOnLastRun = true;
            Settings.Default.Save();

            MessageBox.Show("The application has been upgraded from a previous version. You will need to restart the application.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            return true;
        }
        return false;
    }

Я запускаю эту проверку при запуске и непосредственно перед запуском приложения - UpgradeUserSettings() вызывается в Initialise()

                MyApplicationContext context = new MyApplicationContext();
                var result = Initialise();
                if (result)
                    Application.Exit();     
                else
                    Application.Run(context);

Мне пришлось реализовать это таким образом, потому что, если я запускаю UpgradeUserSettings() и продолжаю в том же экземпляре приложения, приложение продолжает читать значения параметров по умолчанию, а не старые сохраненные значения, которые есть у пользователя , Я даже попытался Settings.Default.Reload() после миграции, но приложение все еще читает значения по умолчанию.

Есть ли другой способ для приложения прочитать сохраненные / сохраненные значения после переноса приложения без необходимости перезапуска приложения пользователем вручную?

Примечание. Мое приложение настроено таким образом, что в каждый момент времени может работать только один экземпляр, поэтому я не могу написать его для создания нового экземпляра приложения и закрытия текущего экземпляра из кода: (

Обновление - рабочие процессы приложения:

Чтобы прояснить, как все работает и что я хотел бы сделать, это текущие рабочие процессы приложения (стандарт любого приложения .NET, реализующего базовую функциональность пользовательских настроек)

Поведение параметров по умолчанию - исключая любую миграцию

  1. Пользователь впервые открывает приложение (например, v1.0)
  2. Приложение создает пользовательские настройки в каталоге по умолчанию со значениями по умолчанию
  3. Пользователь вносит изменения в настройки и закрывает приложение
  4. Приложение сохраняет значения в файле настроек (user.config)
  5. Пользователь снова открывает приложение, и они могут читать сохраненные настройки.

Миграция по умолчанию (при условии, что все действия настройки параметров по умолчанию, описанные выше, уже выполнены)

  1. Пользователь копирует новую версию (например, v1.1) приложения в тот же каталог и заменяет старую версию.
  2. Пользователь Открывает новую версию (v1.1) в первый раз
  3. Приложение выполняется (и, по-видимому, создает новый user.config в новой папке v1.1 со значениями по умолчанию)
  4. Приложение обнаруживает необходимость перенастройки параметров и выполняет миграцию настроек (перенос старых сохраненных настроек из версии 1.0 в версию 1.1)
  5. После переноса настроек приложение не имеет доступа к новым настройкам во время выполнения, поэтому приложение необходимо закрыть и открыть снова, пользователь закрывает приложение.
  6. Пользователь снова открывает приложение, и старые настройки можно читать как обычно.

Идеальное миграционное поведение

  1. Пользователь копирует новую версию (например, v1.1) приложения в тот же каталог и заменяет старую версию.
  2. Пользователь Открывает новую версию (v1.1) в первый раз
  3. Приложение выполняется (и, по-видимому, создает новый user.config в новой папке v1.1 со значениями по умолчанию)
  4. Приложение обнаруживает необходимость переноса настроек и выполняет миграцию настроек (перенос старых сохраненных настроек с версии 1.0 на версию 1.1)
  5. Приложение обновляет доступ к настройкам во время выполнения без перезагрузки.
  6. Пользователь может читать сохраненные настройки как обычно.
...