Como impedir que um patch exija acesso à fonte de instalação original

Não é possível eliminar todas as circunstâncias nas quais a aplicação de um patch pode exigir acesso à fonte de instalação original.

Siga os seguintes pontos para minimizar a possibilidade de que o patch exija o acesso à fonte original:

  • Use somente patches de arquivo inteiro. Isso elimina a necessidade de criar patches binários para todas as versões anteriormente lançadas do arquivo. Observe que os patches de arquivo inteiro geralmente são maiores do que os patches binários. Você pode definir um patch com facilidade para ser um patch de arquivo inteiro criando a propriedade IncludeWholeFilesOnly com um valor igual a um (1) no arquivo PCP (Propriedades de Criação de Patch).
  • Verifique se nenhuma das ações personalizadas acessa o local de fonte original.
  • Verifique se a ação ResolveSource está condicionalizada para que ela só seja executada quando necessário ou, como alternativa, não esteja presente.
  • Preencha a tabela MsiFileHash para todos os arquivos sem controle de versão. A ferramenta Msifiler.exe do SDK do Windows Installer pode fazer isso para você com facilidade.
  • Verifique se todos os arquivos têm a versão e as informações de idioma corretas. A ferramenta Msifiler.exe do SDK do Windows Installer pode fazer isso para você com facilidade.

Requisitos de origem durante a aplicação de patch

O acesso às fontes de instalação originais pode ser necessário para aplicar o patch nos seguintes casos:

  • O patch se aplica a um recurso que atualmente é executado por meio da origem. Nesse caso, o recurso é transferido do estado de execução por meio da origem para o estado local.

  • O patch se aplica a um componente que tem um arquivo ausente ou corrompido.

  • O patch se aplica a um arquivo em um componente que também contém arquivos sem controle de versão e sem entradas MsiFileHash. Uma tabela MsiFileHash preenchida é necessária para evitar uma nova cópia desnecessária dos arquivos sem controle de versão do local de origem.

  • O patch foi aplicado com um REINSTALLMODE igual a amus ou emus. Essa opção é perigosa porque executa operações de cópia de arquivo, independentemente da versão do arquivo. Isso pode levar à aplicação de revisões anteriores aos arquivos e quase sempre exige a origem. O valor REINSTALLMODE recomendado é omus.

  • O pacote armazenado em cache para o produto está ausente. O pacote armazenado em cache é necessário para a aplicação de um patch. O pacote armazenado em cache é armazenado na pasta %windir%\Installer.

  • O pacote é criado para fazer uma chamada à ação ResolveSource. Essa ação geralmente deve ser evitada ou condicionalizada adequadamente, pois a execução dela sempre resulta em um acesso à origem.

  • O pacote tem uma ação personalizada que tenta acessar a origem de alguma forma. O exemplo mais comum é uma ação personalizada de instalação simultânea tipo 23.

    Observação

    Instalações simultâneas não são recomendadas para instalar aplicativos destinados a serem liberados para o público. Para obter informações sobre instalações simultâneas, confira Instalações simultâneas.

     

  • O pacote de patch consiste em patches binários que não se aplicam à versão atual do arquivo no computador.

Considere o seguinte exemplo em que o Windows Installer exige acesso à fonte original ao aplicar um patch:

  1. Instale a versão RTM do produto Exemplo.
  2. Aplique o patch Qfe1.msp ao computador. Isso corrige a versão 1.0 do Example.dll para a versão 1.1.
  3. Um novo patch, Qfe2.msp, é fornecido, que atualiza o Example.dll para a versão 1.2 e torna Qfe1.msp obsoleto. No entanto, o patch só foi criado para ser direcionado à versão 1.0 do Example.dll porque foi gerado por meio da versão RTM do produto. O Example.dll versão 1.2 inclui a correção contida no Example.dll versão 1.1, mas o arquivo .msp foi gerado entre as imagens RTM e QFE2. Portanto, quando o Qfe2.msp é aplicado ao computador, o Windows Installer precisa acessar a fonte original. O patch binário do Example.dll não pode ser aplicado à versão 1.1. Ele só pode ser aplicado à versão 1.0. Isso resulta em uma nova cópia da versão 1.0 do Example.dll pelo Installer do local de fonte original para que o patch possa ser aplicado com sucesso.

Requisitos de origem durante a remoção de um patch

O acesso às fontes de instalação originais poderá ser necessário para remover um patch se o Windows Installer não tiver armazenado informações de linha de base sobre o patch. A partir do Windows Installer 3.0, o instalador salva seletivamente as informações de linha de base sobre os arquivos quando eles são atualizados. Para obter mais informações sobre o cache de linha de base, confira Como reduzir o tamanho do patch.