C acção # personalizada no Wix
-
06-07-2019 - |
Pergunta
Quando meu aplicativo é desinstalado, o servidor precisa ser notificado para que possa liberar a chave de licença atribuído ao cliente. Isto é feito através de uma chamada de serviço web.
Eu criei um C # ação personalizada que faz isso. O problema é que o desinstalador é desistir dizendo que ele não poderia encontrar uma dll.
O log de erro para o MSI contém o seguinte erro:
Erro 1723. Há um problema com este pacote do Windows Installer. A DLL necessário para esta instalação seja concluída não pôde ser executado. Contacte o seu apoio pessoal ou o fornecedor do pacote. Açao ReadLicenseKeyFromFile, entrada: ReadLicenseKey, biblioteca: C: \ Windows \ Installer \ MSI4F42.tmp
Eu tenho a função ReadLicenseKey marcado como uma ação personalizada. A ação personalizada é nomeado ReadLicenseKeyFromFile.
<Custom Action="ReadLicenseKeyFromFile" After="InstallInitialize">
REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE
</Custom>
<CustomAction Id="ReadLicenseKeyFromFile" BinaryKey="UnInstallCA.CA.dll" DllEntry="ReadLicenseKey" Execute="immediate" Return="check" />
<Binary Id="UnInstallCA.CA.dll" SourceFile="$(var.UnInstallCA.TargetDir)UnInstallCA.CA.dll" />
O projeto de ação personalizada é saída do arquivo .CA.dll. Eu tentei instalar o arquivo como parte da configuração, manualmente cópia colado o arquivo, não fez nada para o arquivo ... basicamente tentou todas as combinações possíveis.
Deve haver algo que eu estou faltando, então por favor me ajude.
Solução
Lamento ter desperdiçado tempo de todos sobre isso.
A solução foi algo bastante simples demais. Eu tinha esquecido de colocar o atributo [CustomAction] sobre este método particular. Então, mesmo que fosse a última ação que eu tinha escrito no meu arquivo CustomAction.cs, foi o primeiro a ser chamado no InstallExecuteSequence. E por causa disso, eu fui enganado para pensar que ele não poderia encontrar o arquivo. Bem, que, assim como o fato de que eu devo ter sido muito sono ...
De qualquer forma, enquanto procurava a resposta que conseguiu se deparar com muitos recursos agradáveis, especialmente série Alex Shevchuks no Wix . Outra coisa que eu percebi foi que eu não tenho que instalar o arquivo dll ação personalizada. Eu só tenho de referência-lo de meu projeto Wix e fornecer o caminho para ele. A dll fica embutido na configuração e é transmitido a partir de lá quando as ações personalizadas de desinstalação é para ser chamado.
Outras dicas
O seu UnInstallCA.CA.dll copiados para o computador de destino durante a instalação? Parece que ele não está lá na desinstalação.
Se ele chegou lá - ele pode executar? (Tente executá-lo a partir da máquina alvo para ver se ele pode fazer o que é suposto fazer - talvez você precisa de enviar algum outro dll que você está usando de um presente - ou talvez algum pacote redistribuível)