Вопрос

Приложение Winform выпускается вместе с ClickOnce в нашей интрасети.Мы храним личные предпочтения в отношении графического интерфейса пользователя в Изолированном хранилище.Все работает довольно нормально :)

Проблема в том, что когда у нас появляется новая версия приложения, мы ее публикуем...все предпочтения потеряны!Пользователю необходимо настраивать свои предпочтения снова и снова для каждой версии.

Есть ли способ заморозить изоляцию для всего приложения, а не для версии?

Это было полезно?

Решение

Вам нужно использовать применение ограниченный, а не домен ограниченное, изолированное хранилище.Это можно сделать с помощью одного из IsolatedStorageFileStream-х годов перегруженные конструкторы.

Пример:

using System.IO;
using System.IO.IsolatedStorage;
...

IsolatedStorageFile appScope = IsolatedStorageFile.GetUserStoreForApplication();    
using(IsolatedStorageFileStream fs = new IsolatedStorageFileStream("data.dat", FileMode.OpenOrCreate, appScope))
{
...

Однако теперь вы столкнетесь с проблемой того, что этот код работает только тогда, когда приложение запущено через ClickOnce, потому что это единственный раз, когда доступно изолированное хранилище с областью действия приложения.Если вы не запускаетесь через ClickOnce (например, через Visual Studio), GetUserStoreForApplication() выдаст исключение.

Обходной путь это проблема в том, чтобы убедиться Домен приложения.Текущий домен.ActivationContext не равно нулю перед попыткой использовать изолированное хранилище в области приложения.

Другие советы

Некоторое время назад я работал над приложением ClickOnce и использовал среду.GetFolderPath(ApplicationData) - напримерперемещаемая папка данных приложения для хранения всех настроек.Работал нормально и пережил многочисленные обновления.Просто создайте подраздел с именем вашего приложения или CompanyName / AppName или чем-то еще и сохраните все там.

краткое изложение других ответов:

IsolatedStorageFile isolatedStorage = IsolatedStorageFile.GetUserStoreForAssembly();//for visual studio
if (System.Deployment.Application.ApplicationDeployment.IsNetwor‌​kDeployed)
{
    isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();//for click once applications
}

Вы должны хранить постоянную версию пользовательских настроек в более надежном хранилище, таком как база данных.Ваше приложение может решить использовать изолированное хранилище, если оно доступно.Если он недоступен (из-за более новой версии), приложение должно получить настройки из базы данных и использовать их для повторной инициализации настроек в изолированном хранилище.Если настройки изменены, вам следует обновить оба места.Если нет более новой версии приложения, вашему приложению не нужно получать настройки из базы данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top