Sequenciamento de patches
A partir do Windows Installer 3.0, os autores podem adicionar informações de sequenciamento de patch ao banco de dados do pacote de patch na tabela MsiPatchSequence. O instalador pode usar essas informações para determinar quais patches são aplicáveis a um pacote de instalação, para determinar a melhor sequência de aplicação de patch e para instalar patches em uma ordem constante, independentemente da ordem em que são fornecidos ao sistema.
Windows Installer 2.0: sem suporte. As versões do Windows Installer anteriores ao Windows Installer 3.0 instalam patches na ordem em que são fornecidos ao sistema, independentemente de conterem uma tabela MsiPatchSequence.
Os itens a seguir são necessários para usar a funcionalidade de sequenciamento de patch.
- Os pacotes de patch (arquivos .msp) devem ter uma tabela MsiPatchSequence que tenha informações de sequenciamento. O instalador instala patches que não têm uma tabela MsiPatchSequence na ordem em que são fornecidos ao sistema.
- Os patches são instalados usando o Windows Installer 3.0 ou posterior.
O Windows Installer versão 3.0 tem as seguintes funções que os aplicativos podem usar para determinar a melhor sequência de aplicação de patch.
- A função MsiDeterminePatchSequence usa uma lista de patches e determina em qual sequência eles podem ser aplicados a um produto instalado. Essa função é responsável por todos os patches ou produtos que já foram instalados no sistema.
- A função MsiDetermineApplicablePatches usa uma lista de patches e determina em qual sequência eles podem ser aplicados a um produto instalado. Essa função não considera os patches ou produtos que já foram instalados no sistema.
O Windows Installer versão 3.0 pode aplicar vários patches a um produto em uma única instalação de aplicação de patch. O grupo de patches pode conter patches que incluem informações de sequência de aplicação de patch (uma tabela MsiPatchSequence ) e patches que não incluem. O Windows Installer instala os pacotes de patch sem essa tabela na ordem em que eles são fornecidos ao sistema. O instalador é responsável por pacotes de patch que não têm uma tabela MsiPatchSequence, mas que foram marcados como patches obsoletos ou substituídos pelo método descrito na seção a seguir.
Quando o Windows Installer versão 3.0 instala vários patches, ele segue estas etapas para determinar a sequência na qual os patches individuais são aplicados ao produto:
Os patches instalados sem uma tabela MsiPatchSequence são posicionados na sequência na ordem em que foram aplicados ao produto. O primeiro patch aplicado é posicionado em primeiro lugar na sequência.
Novos patches sem uma tabela MsiPatchSequence são posicionados na sequência. Esses patches estão sendo aplicados pela instalação de aplicação de patch atual. Eles são colocados na ordem em que são fornecidos ao sistema e posicionados após todos os patches na etapa 1.
Os patches obsoletos são eliminados da sequência de patches.
Observação
Um pacote de patch pode especificar na propriedade Revision Number Summary uma lista explícita de patches obsoletos a serem removidos pelo patch. Esta lista serve para ser usada por versões do Windows Installer anteriores à versão 3.0. O Windows Installer versão 3.0 remove os patches da sequência que foram marcados como obsoletos, somente se os patches não tiverem a tabela MsiPatchSequence.
O instalador percorre a sequência de aplicação de patch e determina quais patches são aplicáveis na sequência fornecida. Quando vários patches são aplicados a um produto, cada patch na sequência também transforma o banco de dados de instalação do produto (arquivo .msi). Um patch será aplicável em uma sequência específica somente se sua transformação de banco de dados puder usar o código do produto, a versão, o idioma e o código de atualização resultantes da aplicação das transformações de todos os pacotes de patch anteriores ao banco de dados do produto. O instalador elimina todos os patches inaplicáveis da sequência.
O instalador começa a colocar patches que têm informações de sequenciamento na tabela MsiPatchSequence. Os patches de atualização secundária que têm a tabela MsiPatchSequence são posicionados na sequência após os patches que foram sequenciados nas etapas anteriores e na ordem das menores para as maiores versões de produto, depois de serem atualizados. Em seguida, o Windows Installer elimina todos os patches de atualização secundários que são inaplicáveis nesta sequência.
Patches de pequena atualização direcionados a atualizações secundárias com uma tabela MsiPatchSequence são atribuídos à maior versão do patch de atualização secundária na sequência.
Todos os pequenos patches de pequena atualização que permanecem não atribuídos após as etapas anteriores e que têm a tabela MsiPatchSequence são posicionados na sequência antes da primeira atualização secundária que tem a tabela MsiPatchSequence e após o banco de dados de instalação do .msi e dos patches sem a tabela MsiPatchSequence. Em seguida, o Windows Installer elimina todos os patches de pequena atualização que são inaplicáveis nesta sequência.
O Windows Installer versão 3.0 elimina patches substituídos da sequência. Quando um patch substitui os patches que ocorrem anteriormente na sequência de patch, o patch contém todas as correções nos patches anteriores. Os patches anteriores não são mais necessários. O Windows Installer necessita das informações na tabela MsiPatchSequence para eliminar patches substituídos.
Observação
Os patches destinados a substituir um conjunto anterior de patches devem ser criados para substituir os patches anteriores em todas as famílias de patch. Patches de pequena atualização só podem substituir pequenas atualizações. Atualizações secundárias podem substituir atualizações pequenas e outras atualizações secundárias.
Patches de pequena atualização que carregam tabelas MsiPatchSequence são sequenciados nas versões do produto de acordo com as informações de sequenciamento em suas tabelas MsiPatchSequence. Isso determina a sequência de aplicação de patch final.
Um patch que não deve mais ser usado pode ser eliminado da sequência de aplicação de patch. Para obter mais informações sobre como eliminar patches da sequência de aplicação de patch, consulte Eliminando patches.
Para obter um exemplo de como a tabela MsiPatchSequence pode ser usada para aplicar patches na ordem em que eles são criados, consulte o Exemplo de aplicação de patch múltipla.