Pergunta

aplicação O Winform é a liberação com ClickOnce em nossa Intranet. Nós armazenamos preferência pessoal para o GUI no armazenamento isolado. Tudo funciona muito bem:)

O problema é quando temos uma nova versão do aplicativo, publicamos ... todas as preferências estão perdidos! necessidade do usuário para configurar sua preferência mais e mais cada versão.

Existe uma maneira de congelar o isolamento de toda a aplicação em vez da versão?

Foi útil?

Solução

Você precisa usar aplicativo escopo, ao invés de domínio escopo, isolado de armazenamento. Isso pode ser feito usando um de construtores sobrecarregados de IsolatedStorageFileStream.

Exemplo:

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

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

No entanto, agora você vai correr para a emissão deste código só funciona quando o aplicativo foi lançado via ClickOnce porque essa é a única vez no escopo de aplicação isolada de armazenamento está disponível. Se você não lançar via ClickOnce (como através do Visual Studio), GetUserStoreForApplication () irá lançar uma exceção.

A maneira de contornar este problema é certificar-se AppDomain.CurrentDomain.ActivationContext não é nulo antes de tentar a aplicação de uso escopada isolado de armazenamento.

Outras dicas

Eu estava trabalhando em um aplicativo ClickOnce há um tempo atrás e usou Environment.GetFolderPath (ApplicationData) - por exemplo, pasta de dados do aplicativo de roaming, para armazenar todas as configurações. Funcionou bem e sobreviveu inúmeras atualizações. Basta criar uma subdireectory com o nome de seu aplicativo ou CompanyName / AppName ou o que quer e armazenar tudo lá dentro.

um resumo das outras respostas:

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

Você tem que armazenar uma versão permanente de configurações do usuário em uma loja mais durável como banco de dados. O aplicativo pode decidir usar o armazenamento isolado, se estiver disponível. Se ele não está disponível (por causa de uma versão mais recente), o aplicativo deve obter as configurações de banco de dados e usá-lo para reinicializar as configurações no armazenamento isolado. Se as configurações forem alteradas, você deve atualizar ambos os lugares. A menos que haja uma versão mais recente do aplicativo, o aplicativo não deve ter para obter as definições de DB.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top