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