Pergunta

Estou tendo problemas desinstalar um compartilhados win32 SxS montagem usando Wix3 no WinXP. Meus olhares de arquivo wix muito parecido com o descrito em http://n2.nabble.com/Tutorial-How-to-install-files-into-WinSxS-td841475.html .

O problema é que, se um módulo do conjunto está em uso, da conclusão do desinstalador com um errorcode sucesso, mas deixa a montagem em um estado quebrado: o catálogo manifesto e segurança foram apagados, mas o diretório de montagem ainda existe com a minha dLLs no-lo. As DLLs sobreviver reboots, por isso não são marcados para eliminação de qualquer forma. Não há erros óbvios no arquivo de log MSI.

Se eu tentar re-instalar o pacote, ele ignora a instalação do conjunto. Os componentes não são mais registrados, então eu não pode obter Installer para tentar desinstalar novamente. A seguir é mostrado no log de msi em instalações subseqüentes:

MSI (c) (98:44) [11: 46: 56: 263]: pular instalação de montagem de componentes: {26A273E7-7F9A-4F77-9FA8-5E413A155BEC} uma vez que o conjunto já existe

Não consigo encontrar uma maneira de trazer o de volta SxS em um curto bom estado de apagar manualmente diretório da minha montagem, que neste momento não está sendo protegida por XP Restauração do sistema.

Enquanto meu instalador real é muito mais complicado, eu tenho sido capaz de reproduzir este com um instalador muito básico que tem um único recurso que contém um único componente. Esse componente contém uma dll, um manifesto e um catálogo de segurança. O elemento dlls tem KeyPath, Montagem e atributos AssemblyManifest set. Uma vez instalado, que pode simular uma carga de processo, a montagem abrindo a DLL em MSVS.

Existe uma ação extra eu deveria estar invocando na desinstalação para detectar e prevenir esta situação? Como alternativa, há uma maneira de forçar a operação de instalação a ser executada mesmo que os DLLs já existem em winsxs?

Um pouco relacionado, eu também tenho um problema se eu tentar atualizar o pacote que instalou o conjunto se a montagem não está mudando. O instalador decide que não precisa reinstalar o conjunto (uma vez que não foi alterado), mas, em seguida, quando os SxsUninstallCA é executado, ele vai e remove a montagem. Do ponto de vista do Instalador, o componente ainda está instalado, mas os arquivos são ido.

Foi útil?

Solução

Eu estou trabalhando em algo que eu acredito que eu vou executar para esse mesmo problema.

A minha suposição é neste momento que eu teria que resolver isso com um pouco de mojo do regkey HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations, e possivelmente pouco de permissão de arquivo bater (se os arquivos ainda estavam trancadas).

O que, naturalmente, requer um reinício.

Claro que, em seu instalador, você pode verificar a presença das chaves e bloco na instalação até que eles se foram. (Ou seja, "você precisa reiniciar").

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