Estou tentando personalizar a localização do user.config
arquivo. Atualmente é armazenado com um hash e número de versão
%AppData%\[CompanyName]\[ExeName]_Url_[some_hash]\[Version]\
Eu quero ser agnóstico em relação à versão do aplicativo
%AppData%\[CompanyName]\[ProductName]\
Isso pode ser feito e como? Quais são as implicações? O usuário perderá as configurações da versão anterior após a atualização?
%AppData%\[CompanyName]/[ProductName]
onde podemos confiar que ele permanecerá.Respostas:
Para responder à primeira pergunta, você pode tecnicamente colocar o arquivo onde quiser, mas terá que codificá-lo você mesmo, pois o local padrão para onde o arquivo vai é o primeiro de seus dois exemplos. ( link para como fazer você mesmo )
Quanto à segunda pergunta, depende de como você implanta o aplicativo. Se você implantar por meio de um .msi, haverá dois hashes nas propriedades do projeto de instalação (a partir do qual o msi foi criado), o 'código de atualização' e o 'código do produto'. Isso determina como o msi pode ser instalado e se ele atualiza, sobrescreve ou instala ao lado de qualquer outra versão do mesmo aplicativo.
Por exemplo, se você tem duas versões do seu software e eles têm códigos de 'atualização' diferentes, para o Windows eles são partes de software completamente diferentes, independentemente do nome. No entanto, se o código de 'atualização' for o mesmo, mas o código do 'produto' for diferente de quando você tentar instalar o segundo msi, ele perguntará se você deseja atualizar, momento em que deve copiar os valores do configuração antiga para uma nova configuração. Se os dois valores forem iguais e o número da versão não mudar, a nova configuração estará no mesmo local da configuração antiga e não terá que fazer nada. Documentação MSDN
O ClickOnce é um pouco diferente, porque se baseia mais na versão # e no caminho do URL do ClickOnce. No entanto, descobri que, enquanto você continuar a 'Publicar' no mesmo local, a nova versão do aplicativo continuará a usar o configuração existente. ( link para como ClickOnce lida com atualizações )
Também sei que existe uma maneira de mesclar manualmente as configurações durante a instalação do msi usando scripts de instalação personalizados, mas não me lembro das etapas exatas para fazer isso ... (veja este link para saber como fazer isso com uma web. config)
fonte
Eu queria adicionar este texto citado como uma referência para quando eu tiver esse problema no futuro. Supostamente, você pode instruir a infraestrutura ApplicationSettings a copiar as configurações de uma versão anterior chamando Upgrade :
Da postagem do blog de Perguntas frequentes sobre as configurações do cliente : ( arquivo )
não acredito por um segundo que isso realmente funcione - não há nenhuma maneira da Microsoft fornecer essa capacidade, mas o método está lá do mesmo jeito.
fonte
if(CallUpgrade) { Upgrade(); }
declaração simples .Properties.Settings.Value
Eu tenho aProperties.Settings
parte, mas estou faltando alguma coisa ou isso é específico para você?Upgrade
isso não funciona.Properties.Settings.Default.Upgrade()
Properties.Settings.Default.Save();
depois de alterá-lo para falso :-)O arquivo user.config é armazenado em
c:\Documents and Settings>\<username>\[Local Settings\]Application Data\<companyname>\<appdomainname>_<eid>_<hash>\<verison>
<c:\Documents and Settings>
é o diretório de dados do usuário, seja sem roaming (Configurações locais acima) ou em roaming.<username>
é o nome do usuário.<companyname>
é o valor CompanyNameAttribute, se disponível. Caso contrário, ignore este elemento.<appdomainname>
é o AppDomain.CurrentDomain.FriendlyName. Geralmente, o padrão é o nome .exe.<eid>
é a URL, StrongName ou Path, com base na evidência disponível para hash.<hash>
é um hash SHA1 de evidências coletadas do CurrentDomain, na seguinte ordem de preferência:1. StrongName
2. URL:
Se nenhum deles estiver disponível, use o caminho .exe.
<version>
é a configuração AssemblyVersionAttribute do AssemblyInfo.A descrição completa está aqui http://msdn.microsoft.com/en-us/library/ms379611.aspx
fonte
(Eu adicionaria isso como um comentário à resposta de @Amr, mas ainda não tenho representantes suficientes para fazer isso.)
o informações no artigo do MSDN são muito claras e parecem ainda se aplicar. No entanto, não menciona que o hash SHA1 é gravado codificado na base 32, em vez da base 16 mais típica.
Acredito que o algoritmo que está sendo usado está implementado no
ToBase32StringSuitableForDirName
, que pode ser encontrado aqui na fonte de referência da Microsoft .fonte