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.

Foi útil?

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)

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