Força substituir de App.config durante a instalação
-
05-07-2019 - |
Pergunta
Atualmente, temos 4 instaladores para o nosso software cliente:
- ClientSetupTest
- ClientSetupProduction
- ClientUpdateTest
- ClientUpdateProduction
As únicas diferenças entre eles são que a instalação contém o Crystal Reports arquivos redistribuíveis, e atualização não. Teste e produção apenas especifica quais ambiente em que são executados em ea única diferença que existe uma linha no arquivo Client.exe.config.
mudo, eu sei, é por isso que eu substituí-los todos com um instalador após livrar-se do Crystal Reports. O novo instalador escreve o ambiente selecionado para setup.config, que é referenciado pelo atributo de arquivo ( veja aqui ).
O atributo "file" é novo para o arquivo de configuração com este novo instalador. O problema que eu estou correndo em é que se nós modificar o arquivo Client.exe.config em uma instalação antiga, em seguida, executar o novo instalador, o arquivo de configuração não é atualizado com o atributo "file".
Existe alguma maneira de forçá-lo a atualizar um arquivo? RemovePreviousVersions não é exatamente trabalhar, já que é um instalador diferente, a menos que eu estou mal-entendido alguma coisa. Minha idéia atual, que provavelmente trabalho, é adicionar o código no método OnBeforeInstall para renomear o antigo Client.exe.config para um arquivo de backup, por isso vai sempre escrever o novo. Parece que deve haver uma solução mais simples dentro do próprio instalador, no entanto. Alguma idéia?
Editar : Mudar o nome do arquivo de configuração antigo para Client.exe.config.old antes de chamar base.OnBeforeInstall () não funcionou. Ele renomeou o arquivo, mas nunca escreveu um novo.
Solução
Windows Installer não irá atualizar um arquivo modificado .
Nonversioned Os arquivos são dados do usuário-Se a data modificada é depois que a data de criação do arquivo no computador, não instale o arquivo porque as personalizações do usuário seria excluído. Se o Modified e criar datas são as mesmas, instalar o arquivo. Se a data Criar é posterior à data de modificação, o arquivo é considerado inalterado, instalar o arquivo.
Você tem algumas opções:
-
incluir uma ação personalizada que modifica o arquivo no lugar. Isso pode ser um script ou código .NET .
-
fazer como você diz - mover o arquivo existente fora do caminho. O instalador não vai parar nele. Mas você precisa ter certeza de que isso acontece na ordem que você está imaginando. Você pode precisar Orca para descobrir a ordenação .
-
incluem uma opção personalizada para definir a data de criação para ser "hoje". Isso deve ser muito simples, com uma ação personalizada script, usando o Scripting.FileSystemObject . Então instalador do Windows irá substituí-lo.