Compartilhar via


Windows Installer para Desenvolvedores de Jogos

Mostra como o Windows Installer pode ser usado para instalar jogos em computadores de usuário final. O Windows Installer oferece suporte completo para uma interface do usuário personalizada, bem como para aplicação de patch.

O Microsoft Windows Installer é a API preferencial para instalar software em computadores baseados no Windows. Embora muitos dos recursos do Windows Installer sejam projetados para dar suporte à implantação de aplicativos de negócios em um ambiente corporativo, o Windows Installer também é completamente adequado para instalar jogos em computadores de usuário final. As principais vantagens de usar o Windows Installer para instalação de jogos são:

  • Desinstalação confiável
  • Capacidade de instalar conteúdo sob demanda
  • Suporte para interface do usuário completamente personalizada
  • Aplicação de patch eficiente

Este artigo fornece uma visão geral do Windows Installer, especificamente direcionado para desenvolvedores de jogos. Para obter documentação detalhada sobre os recursos e APIs mencionados neste artigo, consulte o SDK da Plataforma Windows.

Visão geral

Todas as configurações baseadas no Windows Installer usam um arquivo de banco de dados de instalação chamado arquivo MSI para descrever como o aplicativo deve ser instalado. O arquivo MSI contém informações sobre quais arquivos, chaves do Registro, atalhos da área de trabalho, associações de arquivos e outros elementos do aplicativo devem ser instalados. Os arquivos reais a serem instalados podem ser compactados dentro do próprio arquivo MSI, agrupados e compactados em "arquivos de gabinete" separados ou armazenados em outro lugar na mídia de instalação como arquivos descompactados individuais. O arquivo MSI também pode referenciar ações personalizadas implementadas externamente, a fim de permitir ações para as quais o arquivo MSI não permite nativamente.

Opcionalmente, um arquivo MSI pode conter uma interface do usuário para orientar o usuário durante o processo de instalação. Essa interface do usuário é adequada para a maioria dos aplicativos. No entanto, ele tem a aparência de um aplicativo regular do Windows, e muitos desenvolvedores de jogos preferem que seu aplicativo de instalação mantenha a aparência do jogo em si, a fim de fornecer uma experiência mais consistente do usuário final. Para dar suporte a esse cenário de interface do usuário totalmente personalizado, um aplicativo de instalação pode desativar a interface do usuário interna do Windows Installer e manipular toda a interface do usuário em si. A API do Windows Installer expõe um mecanismo de retorno de chamada para permitir que uma interface do usuário de instalação personalizada seja notificada sobre o progresso da instalação, bem como eventos importantes, como solicitações de alteração de disco.

O Windows Installer não é uma solução de ponta a ponta para criar configurações. É apenas uma API que pode ser usada por um programa de instalação para fazer a instalação real de arquivos, chaves do Registro, atalhos de área de trabalho e outros elementos do aplicativo. Versões recentes de todas as principais ferramentas de instalação comercial (por exemplo, InstallShield, WISE e Microsoft Visual Studio) dão suporte ao Windows Installer. Essas ferramentas fornecem interfaces de usuário convenientes para criar a configuração de um jogo, mas dependem da API do Windows Installer para fazer grande parte da instalação real. Essas ferramentas também podem ser usadas apenas para criar um banco de dados MSI que contém o pacote de instalação, que pode ser instalado a partir de uma interface do usuário de instalação personalizada. Como alternativa às ferramentas de terceiros, a API do Windows Installer fornece todas as funções necessárias para criar e manipular um banco de dados MSI programaticamente, e o SDK da Plataforma Windows inclui uma ferramenta de edição de banco de dados MSI bare-bones chamada Orca.

Principais conceitos do Windows Installer

Aqui estão os componentes e recursos do Windows Installer.

Componentes

Um aplicativo é composto por um ou mais componentes, identificados por uma ID de componente GUID. Um componente é uma unidade atômica; ele está totalmente instalado ou não está instalado. Um componente pode consistir em um único arquivo, vários arquivos, chaves do Registro, atalhos da área de trabalho ou alguma combinação dele. Os recursos (arquivos e assim por diante) dentro de um componente devem ser exclusivos para que dois componentes não possam conter o mesmo recurso. Um componente nunca é instalado explicitamente; ele só é instalado como parte de um recurso (veja a seguir).

Recursos

Um recurso é um grupo de componentes, identificados por uma ID de recurso guid. Ao contrário dos componentes, vários recursos podem conter o mesmo componente. Um componente compartilhado entre vários recursos será instalado se qualquer um desses recursos estiver instalado e removido somente quando todos os recursos que fazem referência ao componente tiverem sido desinstalados. A instalação de um recurso pode ser feita automaticamente como parte da instalação de um produto ou pode ser feita manualmente usando a API MsiConfigureFeature .

Embora poucos jogos tenham vários "recursos" que podem ser instalados independentemente, o conceito do Windows Installer de um recurso ainda é útil. Como um recurso do Windows Installer nada mais é do que uma coleção de componentes que podem ser instalados juntos, os jogos podem usar recursos para agrupar todo o conteúdo necessário para um estágio específico do jogo. Por exemplo, um jogo orientado a nível poderia definir um recurso por nível, consistindo em todo o conteúdo necessário para esse nível. Isso permitiria que o jogo instalasse o conteúdo um nível por vez de dentro do próprio jogo, em vez de instalar todo o conteúdo para todos os níveis durante a instalação inicial.

Instalar Estados

Cada componente ou recurso tem um estado de instalação associado, que determina se o componente ou recurso está disponível e, em caso afirmativo, onde os arquivos do componente ou recurso estão instalados. Os possíveis estados de instalação de um recurso são:

Ausente

O recurso não está instalado e, portanto, é inacessível.

Local

O recurso está disponível e está instalado para ser executado no disco rígido local.

Source

O recurso está disponível e está instalado para ser executado a partir da mídia de origem original (geralmente um CD ou DVD).

Anunciado

O recurso não está instalado, mas pode ser instalado sob demanda usando a API MsiConfigureFeature . Quando o recurso é realmente instalado, ele pode ser instalado no estado Local ou Origem.

Um componente pode ter qualquer um dos estados acima, exceto "Anunciado". Se um componente fizer parte de um recurso anunciado, o componente aparecerá como "Ausente" até que o recurso seja instalado.

Instalar sob Demanda

O Windows Installer permite que um aplicativo marque recursos como Anunciados, o que significa que o recurso ainda não está instalado, mas está disponível para instalação em runtime, se necessário. A instalação de recursos no runtime é conhecida como "Instalar sob Demanda". Os jogos podem usar Instalar sob Demanda para reduzir drasticamente o tempo necessário para a configuração inicial do jogo, adiando a instalação do conteúdo do jogo até que ele seja necessário em runtime. O atraso necessário para instalar o conteúdo em runtime geralmente pode ser parcial ou completamente oculto fazendo a instalação sob demanda em um thread em segundo plano, enquanto o usuário está ocupado com o jogo.

Interface do usuário personalizada

Embora o Windows Installer forneça uma interface do usuário padrão que orienta o usuário durante a instalação do aplicativo, essa interface se parece com a de um aplicativo padrão do Windows. Muitos desenvolvedores de jogos preferem que a interface do usuário de instalação tenha a mesma aparência do jogo em si, para fornecer ao usuário um gostinho do ambiente do jogo. Para dar suporte a isso, o Windows Installer permite que sua interface do usuário interna seja completamente desabilitada, permitindo que o desenvolvedor forneça uma interface do usuário completamente personalizada.

O programa de instalação personalizada primeiro desabilita a interface do usuário interna do Windows Installer usando a API MsiSetInternalUI para definir o nível da interface do usuário como INSTALLUILEVEL_NONE. Em seguida, ele chama a API MsiSetExternalUI para especificar uma função de retorno de chamada que será chamada durante o processo de instalação para notificar o programa de instalação dos principais eventos durante a instalação.

O processo de instalação real é iniciado chamando a API MsiInstallProduct . Essa API aceita uma cadeia de caracteres de parâmetro que permite que o chamador especifique valores para propriedades nomeadas. Essas propriedades podem ser usadas no próprio banco de dados de instalação para personalizar como o aplicativo deve ser instalado. Essas propriedades podem ser usadas para especificar:

  • O diretório no qual o aplicativo deve ser instalado
  • Quais recursos devem ser instalados localmente e quais devem ser instalados para execução a partir do CD/DVD (por exemplo, para habilitar a escolha entre uma instalação mínima e uma instalação completa)
  • Se o aplicativo deve ser instalado para todos os usuários do computador ou apenas para o usuário atual

Durante a instalação, o programa de instalação usa as mensagens de notificação enviadas para sua função de retorno de chamada para determinar quando atualizar sua interface do usuário indicador de progresso, quando solicitar que o usuário insira o próximo CD ou quando notificar o usuário sobre um erro no processo de instalação.

Aplicação de patch

O Windows Installer permite que os aplicativos instalados sejam corrigidos aplicando um arquivo de patch. Um arquivo de patch contém os novos arquivos a serem adicionados pelo patch, os arquivos modificados pelo patch e uma lista de alterações a serem feitas no banco de dados de instalação. Para conservar espaço, em vez de armazenar o conteúdo completo de um arquivo alterado pelo patch, o arquivo de patch realmente contém apenas as diferenças entre a versão original do arquivo e a nova versão do arquivo.

Para criar um patch, você precisa da imagem de instalação para cada uma das versões do aplicativo das quais deseja atualizar o patch, bem como a imagem de instalação para a nova versão atualizada do aplicativo. Uma imagem de instalação consiste no banco de dados MSI e todos os arquivos de dados reais para o aplicativo. A melhor maneira de criar uma imagem de instalação para uma nova versão do aplicativo é copiar a imagem de instalação da versão anterior do aplicativo e, em seguida, fazer as alterações necessárias para atualizar essa cópia para a versão corrigida.

Depois de ter todas as imagens de configuração necessárias, você pode criar os patches usando Msimsp.exe, que é uma ferramenta de criação de patch disponível como parte do SDK da Plataforma. A ferramenta solicitará os locais de cada uma das imagens de instalação e determinará como representar com eficiência as diferenças entre as versões sucessivas. A saída da ferramenta é o arquivo de patch final (identificado pelo MSP da extensão). Para instalar o patch programaticamente, chame a API MsiApplyPatch . O usuário também pode instalar o patch manualmente clicando duas vezes no arquivo MSP em Explorer.

Outros recursos