ClickOnce и IsolatedStorage - PullRequest
       27

ClickOnce и IsolatedStorage

10 голосов
/ 14 октября 2008

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

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

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

Ответы [ 4 ]

18 голосов
/ 22 октября 2008

Вам необходимо использовать приложение в области, а не домен в изолированном хранилище. Это можно сделать с помощью одного из перегруженных конструкторов 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 () выдаст исключение.

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

4 голосов
/ 14 октября 2008

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

2 голосов
/ 07 декабря 2017

резюме из других ответов:

IsolatedStorageFile isolatedStorage = IsolatedStorageFile.GetUserStoreForAssembly();//for visual studio
if (System.Deployment.Application.ApplicationDeployment.IsNetwor‌​kDeployed)
{
    isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();//for click once applications
}
1 голос
/ 14 октября 2008

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

...