ClickOnce: Conflito na Versão do Manifesto
Ulisses Silva
O problema acontece com quando se tenta atualizar a versão de um programa distribuído em uma mídia removível utilizando a tecnologia ClickOnce.
No caso em que presenciei, o distribuidor do programa copiava toda a pasta contendo os arquivos de instalação para a raiz do drive de sistema (C:). No caso, a pasta “Publish” criada pelo Visual Studio. Ao clicar em “Setup” para iniciar a instalação, ou mesmo diretamente sobre o nome do executável, a instalação era interrompida com erro.
Ao clicar em “Detalhes” era exibida a seguinte informação: “Não é possível instalar este aplicativo porque já há um aplicativo instalado com a mesma identidade. Para instalar este aplicativo, modifique a versão do manifesto deste aplicativo ou desinstale o aplicativo preexistente.“
Minha primeira sugestão para o distribuidor do programa foi que ele fizesse manualmente a desinstalação da versão antiga diretamente no Painel de Controle. Ele fez isso e continuava enfrentando o mesmo problema. Segue o detalhamento completo da mensagem de erro:
INFORMAÇÕES SOBRE VERSÕES DE PLATAFORMAS
Windows : 6.1.7601.65536 (Win32NT)
Common Language Runtime : 4.0.30319.42000
System.Deployment.dll : 4.8.3761.0 built by: NET48REL1
clr.dll : 4.8.4110.0 built by: NET48REL1LAST_B
dfdll.dll : 4.8.3761.0 built by: NET48REL1
dfshim.dll : 4.0.31106.0 (Main.031106-0000)
ORIGENS
URL da Implantação : file:///C:/publish/RA.Aplicacao.application
URL do Aplicativo : file:///C:/publish/Application%20Files/RA.Aplicacao_1_0_0_48/RA.Aplicacao.exe.manifest
IDENTIDADES
Identidade da Implantação : RA.Aplicacao.application, Version=1.0.0.48, Culture=neutral, PublicKeyToken=5b400e3673b0ed51, processorArchitecture=x86
Identidade do Aplicativo : RA.Aplicacao.exe, Version=1.0.0.48, Culture=neutral, PublicKeyToken=5b400e3673b0ed51, processorArchitecture=x86, type=win32
RESUMO DO APLICATIVO
* Aplicativo instalável.
RESUMO DOS ERROS
Um resumo dos erros pode ser encontrado a seguir. Os detalhes desses erros são relacionados posteriormente no log.
* Exceção na ativação de C:\publish\RA.Aplicacao.application. As seguintes mensagens de erro foram detectadas:
+ Não é possível instalar este aplicativo porque já há um aplicativo instalado com a mesma identidade. Para instalar este aplicativo, modifique a versão do manifesto deste aplicativo ou desinstale o aplicativo preexistente.
RESUMO DA FALHA DA TRANSAÇÃO DE ARMAZENAMENTO DO COMPONENTE
Nenhum erro de transação foi detectado.
AVISOS
Não houve avisos durante esta operação.
STATUS DO ANDAMENTO DA OPERAÇÃO
* [08/06/2020 12:25:03] : A ativação de C:\publish\RA.Aplicacao.application foi iniciada.
* [08/06/2020 12:25:03] : O processamento do manifesto da implantação foi concluído com êxito.
* [08/06/2020 12:25:03] : A instalação do aplicativo foi iniciada.
* [08/06/2020 12:25:03] : O processamento do manifesto do aplicativo foi concluído com êxito.
* [08/06/2020 12:25:07] : Encontrada versão 4.0.30319 do runtime compatível.
* [08/06/2020 12:25:07] : A solicitação de confiança e de detecção da plataforma foi concluída.
* [08/06/2020 12:25:08] : O download das dependências da inscrição foi concluído.
* [08/06/2020 12:25:08] : A confirmação do aplicativo baixado foi iniciada.
DETALHES DOS ERROS
Os erros a seguir foram detectados durante esta operação.
* [08/06/2020 12:25:08] System.Deployment.Application.DeploymentException (Subscription)
- Não é possível instalar este aplicativo porque já há um aplicativo instalado com a mesma identidade. Para instalar este aplicativo, modifique a versão do manifesto deste aplicativo ou desinstale o aplicativo preexistente.
- Origem: System.Deployment
- Rastreamento de pilha:
em System.Deployment.Application.SubscriptionStore.CheckApplicationPayload(CommitApplicationParams commitParams)
em System.Deployment.Application.SubscriptionStore.CommitApplication(SubscriptionState& subState, CommitApplicationParams commitParams)
em System.Deployment.Application.ApplicationActivator.InstallApplication(SubscriptionState& subState, ActivationDescription actDesc)
em System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation(Uri activationUri, Boolean isShortcut, String textualSubId, String deploymentProviderUrlFromExtension, BrowserSettings browserSettings, String& errorPageUrl, Uri& deploymentUri)
em System.Deployment.Application.ApplicationActivator.PerformDeploymentActivationWithRetry(Uri activationUri, Boolean isShortcut, String textualSubId, String deploymentProviderUrlFromExtension, BrowserSettings browserSettings, String& errorPageUrl)
--- Fim do rastreamento de pilha do local anterior onde a exceção foi gerada ---
em System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
em System.Deployment.Application.ApplicationActivator.PerformDeploymentActivationWithRetry(Uri activationUri, Boolean isShortcut, String textualSubId, String deploymentProviderUrlFromExtension, BrowserSettings browserSettings, String& errorPageUrl)
em System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker(Object state)
DETALHES DA TRANSAÇÃO DE ARMAZENAMENTO DO COMPONENTE
Nenhuma informação de transação está disponível.
A impressão que tive é que, por alguma estranha razão, o instalador não estava conseguindo sobrescrever a pasta onde ficam os arquivos de um programa instalado através de ClickOnce.
A Solução Fácil
Focando simplesmente na solução rápida do problema sem me preocupar com as razões que a estavam causando deduzi que a solução seria apagar manualmente os arquivos do programa, porém como fazer isso? Onde ficam localizados os executáveis de programas instalados utilizando o ClickOnce? A rota não é muito simples então vou tentar explicar aqui.
Via de regra os arquivos ficam armazenados embaixo da pasta:
C:\Users\<Nome do Usuário>\AppData\Local\Apps\2.0\
Acontece que, por padrão, esta pasta não é visível normalmente. É uma pasta oculta do sistema, para que ela (e todas as outras pastas ocultas) se torne visível é necessário fazer uma pequena alteração no File Explorer (Explorador de Arquivos).
Caso você chegue em “C:\Users\<Nome do Usuário>” e a pasta “AppData” não esteja aparecendo é necessário primeiro dizer ao Windows que você deseja ver as pastas ocultas e para isso siga o seguinte procedimento:
Como Tornar Visíveis As Pastas Ocultas
Windows XP e Windows 7
Windows 8 e Windows 10
Quais Arquivos Apagar
Uma vez dentro da pasta “AppData” você deve ir até “Local”, depois em “Apps”, depois em “2.0”. Lá você encontrará uma pasta chamada “Data” e outra cujo nome é um código complexo formado por letras e números. Vá então nessa pasta de nome complexo.
Uma vez lá dentro você encontrará mais uma pasta com nome composto por um código complexo. Entre nela.
Agora você encontrará uma série de pastas com nome complexo. Localize as pastas cujo nome se assemelham ao nome do programa em questão. Por exemplo, no caso citado, o programa se chamava “RA”. Observe que na lista abaixo temos duas pastas cujo nome começam com “RA”. Apague manualmente essas pastas.
Ainda neste lugar você vai encontrar uma pasta com o nome “manifests”. Entre nela e você encontrará uma série de arquivos de manifesto. Assim como fez com a pasta anterior procure todos os arquivos cujo nome se assemelham ao nome do programa que está apresentando o problema de instalação, em nosso caso, o programa se chama “RA”, observe que há alguns arquivos na lista abaixo cujos nomes começar com “ra”. Apague todos esses arquivos.
Agora volte para a pasta:
C:\Users\<Nome do Usuário>\AppData\Local\Apps\2.0
Entre na pasta “Data” e então aparecerá uma pasta com nome complexo. Entre nela e então aparecerá outra pasta com nome compexo. Entre nela. Uma vez lá repita o procedimento de apagar as pastas cujo nome se assemelha ao nome do programa que você está tentando instalar.
Fazendo este procedimento, ao se tentar novamente instalar o programa, o mesmo foi instalado com sucesso.