Как избежать перезапуска приложения C# после переноса пользовательских настроек

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

    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 в новой папке версии 1.1 со значениями по умолчанию)
  4. Приложение определяет необходимость перенастройки параметров и выполняет миграцию настроек (перенесите старые сохраненные настройки с версии 1.0 на версию 1.1)
  5. После переноса настроек приложение не имеет доступа к новым настройкам во время выполнения, поэтому приложение необходимо закрыть и открыть снова. Пользователь закрывает приложение.
  6. Пользователь снова открывает приложение, и старые настройки можно читать как обычно.

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

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

0 ответов

Другие вопросы по тегам