Как избежать перезапуска приложения 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, реализующего базовую функциональность пользовательских настроек)
Поведение параметров по умолчанию - исключая любую миграцию
- Пользователь открывает приложение в первый раз (например, v1.0)
- Приложение создает пользовательские настройки в каталоге по умолчанию со значениями по умолчанию
- Пользователь вносит изменения в настройки и закрывает приложение
- Приложение хранит значения в файле настроек (user.config)
- Пользователь снова открывает приложение, и они могут читать сохраненные настройки.
Миграция по умолчанию (Предоставление всех шагов поведения настроек по умолчанию, описанных выше, уже произошло)
- Пользователь копирует новую версию (например, v1.1) приложения в тот же каталог и заменяет старую версию.
- Пользователь Открывает новую версию (v1.1) в первый раз
- Приложение выполняется (и, по-видимому, создает новый файл user.config в новой папке версии 1.1 со значениями по умолчанию)
- Приложение определяет необходимость перенастройки параметров и выполняет миграцию настроек (перенесите старые сохраненные настройки с версии 1.0 на версию 1.1)
- После переноса настроек приложение не имеет доступа к новым настройкам во время выполнения, поэтому приложение необходимо закрыть и открыть снова. Пользователь закрывает приложение.
- Пользователь снова открывает приложение, и старые настройки можно читать как обычно.
Идеальное миграционное поведение
- Пользователь копирует новую версию (например, v1.1) приложения в тот же каталог и заменяет старую версию.
- Пользователь Открывает новую версию (v1.1) в первый раз
- Приложение выполняется (и, по-видимому, создает новый файл user.config в новой папке версии 1.1 со значениями по умолчанию)
- Приложение определяет необходимость перенастройки параметров и выполняет миграцию настроек (перенесите старые сохраненные настройки с версии 1.0 на версию 1.1)
- Приложение обновляет доступ к настройкам во время выполнения без необходимости перезапуска.
- Пользователь может читать сохраненные настройки как обычно.