Como remover patches
A partir do Windows Installer versão 3.0, é possível criar e instalar patches que podem ser desinstalados individualmente e em qualquer ordem, sem precisar desinstalar e reinstalar todo o aplicativo e outros patches. O Windows Installer 3.0 também permite que os Pacotes de Patch sejam criados com uma Tabela MsiPatchSequence que contém informações de sequenciamento de patch. Nas versões do Windows Installer anteriores ao Windows Installer 3.0, o único método para remover patches específicos de um aplicativo é desinstalar todo o aplicativo corrigido e reinstalar sem reaplicar os patches que estão sendo removidos.
A desinstalação de um patch depende de como o patch foi criado, da versão do Windows Installer utilizada para instalar o patch e das alterações feitas pelo patch no aplicativo. Se não for possível desinstalar um patch, a única maneira de removê-lo é desinstalar todo o aplicativo e reinstalar sem aplicar o patch que está sendo removido.
Você pode desinstalar um ou mais patches usando uma opção de linha de comando, a interface de script ou chamando MsiRemovePatches de outro aplicativo. Confira Como desinstalar patches para obter mais informações sobre como desinstalar patches.
O valor da propriedade MSIPATCHREMOVE lista os patches a serem desinstalados. Para cada patch na lista, o instalador verifica se o patch é desinstalável. Se o usuário não tiver privilégios para remover o patch, se o patch for desconhecido para o produto, se a política do patch impedir a remoção ou se o patch tiver sido marcado como não desinstalável, o instalador retornará um erro que indica uma falha na transação de instalação. Confira Patches desinstaláveis para obter mais informações sobre o que determina se um patch não é desinstalável.
Depois de verificar que o patch é removível, o instalador remove o patch da sequência de aplicativos de patch. Para obter mais informações sobre como o Windows Installer 3.0 determina qual sequência usar ao aplicar patches, confira Sequenciamento de patches. Observe que a remoção de patches da sequência pode fazer com que patches marcados como obsoletos ou substituídos se tornem ativos.
Todos os patches selecionados para remoção são listados na propriedade MsiPatchRemovalList. Essa é uma propriedade privada definida pelo instalador e pode ser usada em expressões condicionais ou consultada por ações personalizadas. A propriedade contém a lista de GUIDs de código de patch de patches a serem removidos. Uma ação personalizada pode determinar se o estado de instalação do patch é aplicado, obsoleto ou substituído chamando a propriedade MsiGetPatchInfoEx ou PatchProperty do Objeto Patch.
Depois que um patch é removido, o estado do aplicativo é o mesmo como se o patch nunca tivesse sido instalado. Se possível, o instalador restringe o processo ao subconjunto de recursos afetados pelo patch que está sendo removido. O instalador define automaticamente a propriedade REINSTALL como a lista de recursos afetados. Os arquivos que foram adicionados pelo patch são removidos e os arquivos modificados pelo patch são substituídos. Os arquivos e as entradas do registro são restaurados para a versão esperada pelo produto menos o patch. Os recursos e componentes adicionados pelo patch não foram registrados no aplicativo. Observe que o conteúdo adicionado pelo patch poderá permanecer no computador do usuário, se o conteúdo for usado por outro patch que ainda é aplicável.
Se um arquivo de um componente compartilhado for atualizado por um patch, a alteração afetará todos os aplicativos que compartilham o componente. Quando o patch é removido, novamente, a alteração afeta todos os aplicativos que compartilham o componente. Isso significa que a remoção de um patch por um aplicativo pode restaurar o arquivo do componente compartilhado para uma versão inferior à exigida por outro aplicativo. Isso pode corrigir o primeiro aplicativo, mas fazer com que o segundo aplicativo pare de funcionar. Nesse caso, o segundo aplicativo pode ser reparado reinstalando o segundo aplicativo com os métodos descritos em Como reinstalar um recurso ou aplicativo. Isso restaurará a versão corrigida do arquivo.
Tópicos relacionados