(small) Updates and (minor, major) Upgrades

Tipos de atualizações

O Windows Installer suporta três tipos de actualizações de produtos: small updates, minor upgrades, and major upgrades. Os três tipos de actualizações são definidos como se segue.

A small update
consiste em alterações do produto, tais como arranjos a quente, tão pequenas que nenhuma alteração à versão do produto é necessária ou desejada. (Uma desvantagem das pequenas actualizações é que programas externos, incluindo instaladores para versões posteriores do seu produto, não serão capazes de distinguir um produto com a pequena actualização aplicada de um sem a pequena actualização).
A minor upgrade
é uma alteração ao produto suficientemente grande para merecer uma alteração à versão do produto, tal como a actualização da versão 1.1 para 1.2, mas na qual não houve alterações significativas na organização da configuração entre versões. O comportamento em tempo de instalação de uma pequena actualização é de instalar sobre o produto existente.
A major upgrade
inclui alterações substanciais do produto, tais como a actualização da versão 1.2 para 2.0. Uma grande actualização pode conter alterações significativas à arquitectura de configuração. O comportamento de instalação de uma grande actualização pode ser a desinstalação da versão anterior e a instalação da nova versão, ou a instalação sobre a versão anterior e depois a remoção de quaisquer restos de dados.

Para uma versão anterior do produto que foi instalada com uma configuração herdada (não-MSI), será normalmente necessária uma acção personalizada para desinstalar ou modificar a instalação do produto existente.
Uma actualização pode ser empacotada para implantação no sistema alvo como uma instalação completa (pacote MSI). Uma actualização empacotada como uma instalação completa pode ser autorizada (usando acções personalizadas, interruptores de linha de comando, ou um lançador de configuração) para actualizar um produto existente, se este estiver presente, ou para se comportar como uma primeira instalação.

Uma actualização pode também ser embalada como um ficheiro de correcção do Windows Installer (um ficheiro com a extensão MSP). Um patch do Windows Installer contém alterações entre os ficheiros (e outros dados) e tabelas MSI nas versões anteriores e posteriores. As diferenças de ficheiro armazenadas num patch podem ser binárias, diferenças a nível de bytes, resultando possivelmente numa entrega muito menor do que uma actualização empacotada como um pacote de instalação completo. Uma actualização que se embala como um ficheiro de correcção só pode ser utilizada para actualizar um produto existente, instalado, e não pode ser utilizada como uma primeira instalação.

Pequenas actualizações e pequenas actualizações são normalmente empacotadas como patches, enquanto as actualizações maiores são normalmente empacotadas como pacotes de instalação completa.

Um equívoco comum é que os remendos são um tipo separado de actualização, em oposição a um mecanismo de embalagem. De facto, o processo de desenvolvimento de remendos envolve primeiro a concepção de uma actualização menor ou maior, e depois o seu empacotamento como um remendo. Antes de criar um patch, recomenda-se que se teste a actualização como um pacote de instalação completo.

Implementação de Upgrades e Patches

Quando se executa um pacote de instalação MSI pela primeira vez num determinado sistema, o Windows Installer coloca em cache a base de dados MSI no directório oculto %WINDIR%\Installer. Por defeito, quando se executa o mesmo pacote uma segunda vez ou mais tarde no mesmo sistema, o Windows Installer executa o pacote em modo de manutenção, utilizando a base de dados em cache. (Um pacote é tipicamente criado para mostrar uma série diferente de caixas de diálogo para instalações de primeira vez e instalações em modo de manutenção, utilizando condições tais como "Não Instalado").

Durante a instalação inicial, a base de dados MSI é colocada em cache no sistema do utilizador, mas os ficheiros de dados do produto não o são. Se uma operação de manutenção resultar na necessidade de instalar um ficheiro, a MSI requer acesso à fonte de instalação original e solicita ao utilizador que localize a fonte se esta não puder ser encontrada (por exemplo, se a instalação foi realizada a partir de um CD-ROM que já não se encontra na unidade). Por este motivo, deve criar um lançamento com a base de dados MSI externa a um lançador de configuração, ou criar um lançador de configuração que coloque a instalação em cache na máquina local.

Concepção de uma Instalação Amigável à Actualização

A concepção dos seus projectos de instalação - a organização das características, componentes e caminhos-chave de um produto - tem um impacto na eficácia de futuras actualizações. A eficácia de uma actualização ou patch é aferida pelo seguinte:
  1. Utilizar ficheiros chave versionados sempre que possível.
  2. Divida o seu produto em conjuntos discretos de funções (características).
  3. Armazenar dados de registo configuráveis pelo utilizador numa funcionalidade separada.
  4. Os valores de propriedade MSI não são automaticamente guardados durante a instalação inicial.
  5. As novas subcaracterísticas devem ser marcadas como "obrigatório" (required) e "seguir os pais" (follow parent).
  6. Se a sua pequena actualização remover dados (ficheiros, definições de registo, etc.) de um componente, preencha as tabelas "Remover" correspondentes.
  7. Alterar a versão do produto MSI para cada nova versão.
  8. Ao construir o seu pacote de actualização, use Patch Optimization nas suas definições de construção.
  9. Ao gerar um patch para uma instalação comprimida, utilizar uma imagem administrativa.
  10. Ao gerar um patch, ambas as versões devem ter a mesma disposição de meios.


Definições

Major

Número da versão principal, por exemplo 1 na Versão 1.0.2.444
Contém extensas novas funções e é um novo desenvolvimento baseado na versão anterior.

Minor

Número de versão menor, por exemplo 0 na versão 1.0.2.444
Software actualizado com extensos melhoramentos às funcionalidades existentes e poucas novas funcionalidades. O código do produto Windows permanece inalterado.

Revision

Número de compilação, por exemplo 2 na versão 1.0.2.444
Service Pack or Support Update é uma actualização de software com melhorias de detalhe e correcções de bugs. Com o service pack o número de compilação é aumentado e, dependendo da extensão da melhoria, o número de revisão.

Build

Número de compilação, por exemplo 444 na versão 1.0.2.444
Patch, também conhecido como hotfix ou rapidfix, é uma actualização que é lançada para resolução de problemas ou que inclui frequentemente uma funcionalidade nova / melhorada que é urgentemente necessária por um utilizador (patch de cliente). O patch apenas aumenta o número de construção.

Package Code

Parte do Resumo do fluxo de informação (Summary Information Stream), o código do pacote identifica uma base de dados específica. O código do pacote não é uma propriedade do Windows Installer. Quaisquer duas bases de dados .msi com códigos de pacotes idênticos devem ter um conteúdo idêntico. Por conseguinte, deve alterar o código do pacote para cada compilação.

ProductVersion

Esta é uma propriedade do Windows Installer que identifica a versão do produto. Note-se que o Windows Installer utiliza apenas os três primeiros campos da propriedade ProductVersion para comparações de versão. Por exemplo, para uma versão do produto de 1.2.3.4, a 4 é ignorada. (Note-se que isto é verdade para comparações de valores do ProductVersion, e não para versões de ficheiro).

ProductCode

Esta é uma propriedade do Windows Installer que identifica o GUID de um produto. O Windows Installer trata dois produtos com GUIDs de código de produto diferentes como não relacionados, mesmo que os valores para a propriedade ProductName sejam os mesmos.

UpgradeCode

Esta é uma propriedade do Windows Installer que identifica o GUID que representa um conjunto relacionado de produtos. O UpgradeCode deve ser consistente entre diferentes versões e línguas de uma família de produtos relacionados, para que possa ser utilizado para procurar versões relacionadas do produto que já estão instaladas. É possível definir o UpgradeCode para uma actualização na vista Upgrades.


Major Upgrade vs. Minor Upgrade vs. Small Update

Requirement for the Upgrade Use a Major Upgrade? Use a Minor Upgrade? Use a Small Update? Note
Change the name of the .msi package Yes No No The default file name is taken from the Product Name property, provided the .msi file is not compressed in a Setup.exe installation launcher.
Enable end users to install earlier versions and the latest version on the same machine Yes No No
Add a new subfeature Yes In some cases In some cases If the new subfeature consists of new components only, you can use a small update, a minor upgrade, or a major upgrade. If the new subfeature consists of existing components, you must use a major upgrade.
Move or delete a feature in the product tree Yes No No
Add a new component to a new feature Yes Yes Yes
Add a new component to an existing feature Yes Yes Yes
Move or delete a component in the product tree Yes No No
Change the component code of an existing component Yes No No
Change the key file of a component Yes No No
Add, remove, or modify any of the following: files, registry keys, or shortcuts Yes Yes Yes If the file, registry key, or shortcut is in more than one component and the component is shared by two or more features, a major upgrade must be used.
Start with an MSI Database or Transform project Yes No No

Codes that Need to Be Changed for the Different Types of Upgrades

Package Code Product Version Product Code Upgrade Code
Small Update ❲✘❳
Minor Upgrade ❲✘❳ ❲✘❳
Major Upgrade ❲✘❳ ❲✘❳ ❲✘❳