Criação de pacote único
Um pacote de uso duplo é um pacote do Windows Installer 5.0 criado para instalar um aplicativo no contexto de instalação por usuário ou por computador. Os desenvolvedores de instalação que usam um pacote de uso duplo para o aplicativo podem fornecer aos usuários uma opção de contexto de instalação no momento da instalação e podem remover prompts de credenciais UAC das instalações por usuário no Windows 7 ou Windows Server 2008 R2. O desenvolvimento de um pacote de uso duplo do Windows Installer 5.0 para instalação no Windows 7 e no Windows Server 2008 R2 é conhecido como criação de pacote único.
Você pode começar a desenvolver pacotes de uso duplo para Windows 7 e Windows Server 2008 R2 usando o Windows Installer 5.0, a propriedade MSIINSTALLPERUSER , a propriedade ALLUSERS e as pastas conhecidas e registros compatíveis com o contexto por usuário do Shell do Windows. Quando o Windows Installer 5.0 instala um pacote de uso duplo no contexto por usuário no Windows 7 ou no Windows Server 2008 R2, o instalador direciona as entradas de arquivo e registro para locais por usuário e não exibe solicitações de credenciais do UAC. Quando o Windows Installer 5.0 instala um pacote de uso duplo no contexto por computador, o instalador direciona os arquivos e as entradas do registro para locais por computador e solicita credenciais do UAC para confirmar se o usuário tem privilégios suficientes para instalar o software para todos os usuários do computador. Depois que o Windows Installer 5.0 instala um aplicativo, ele usa o mesmo contexto de instalação para todas as atualizações, reparos ou remoções subsequentes do aplicativo.
Windows Installer 4.5 ou anterior: não há suporte para a propriedade MSIINSTALLPERUSER e versões por usuário das pastas referenciadas pelas propriedades ProgramFilesFolder, CommonFilesFolder, ProgramFiles64Folder e CommonFiles64Folder. As pastas FOLDERID_UserProgramFiles e FOLDERID_UserProgramFilesCommon estão disponíveis a partir do Windows 7 e do Windows Server 2008 R2. Isso significa que as instalações desenvolvidas para Windows Installer 4.5 ou anterior direcionam os arquivos e as entradas do registro para FOLDERID_ProgramFiles, FOLDERID_ProgramFilesCommon, FOLDERID_ProgramFilesX64 e FOLDERID_ProgramFilesCommonX64. Como eles são locais acessíveis para outros usuários do computador, o Windows Vista e sistemas posteriores exigem a exibição de solicitações de credenciais do UAC.
Quando um usuário instala um pacote de uso duplo criado para Windows Installer 5.0 com o Windows Installer 4.5 ou anterior, o instalador ignora a propriedade MSIINSTALLPERUSER. Nesse caso, a instalação pode direcionar os arquivos e as entradas do registro para locais acessíveis a outros usuários e exigir que o sistema exiba solicitações de credenciais do UAC. O Windows Installer 5.0 pode instalar um pacote desenvolvido para Windows Installer 4.5 ou anterior, no entanto, a instalação direciona os arquivos e as entradas do registro para locais acessíveis a outros usuários e exige que o sistema exiba solicitações de credenciais do UAC.
Diretrizes de desenvolvimento
Siga as diretrizes de criação de pacote único abaixo para garantir que o pacote possa ser instalado no contexto por usuário ou por computador. Siga estas diretrizes para permitir que o usuário escolha, no momento da instalação, uma instalação por usuário ou por computador e para remover os prompts do UAC das instalações por usuário.
A instalação por usuário requer o Windows Installer 5.0 no Windows 7 ou no Windows Server 2008 R2. Você deve informar ao usuário que o pacote dá suporte à instalação por computador do aplicativo nas versões anteriores do sistema.
Inicialize os valores das propriedades ALLUSERS e MSIINSTALLPERUSER na Tabela Property do pacote de uso duplo. Use o valor ALLUSERS de 2 e um valor MSIINSTALLPERUSER de 1 como os valores iniciais. Isso especifica a instalação por usuário como o padrão para o pacote de uso duplo.
Crie uma caixa de diálogo para a interface do usuário do pacote de uso duplo que permite que o usuário escolha o contexto no momento da instalação. Crie os controles nessa caixa de diálogo personalizada para definir os valores das propriedades ALLUSERS e MSIINSTALLPERUSER. Para o valor ALLUSERS de 2, defina MSIINSTALLPERUSER como um valor de 1 para especificar uma instalação por usuário e defina MSIINSTALLPERUSER como uma cadeia de caracteres vazia ("") para especificar uma instalação por computador. Os usuários também podem definir ALLUSERS e MSIINSTALLPERUSER na linha de comando, se instalarem o pacote da linha de comando.
Valide o pacote usando ICEs (Avaliadores de Consistência Interna). O pacote deve ser aprovado na validação do ICE105 para ser um pacote de uso duplo válido.
Use a Tabela Registry e a Tabela RemoveRegistry para redirecionar as entradas do registro para as partes por usuário do registro durante as instalações por usuário. Em uma instalação por usuário, as entradas do registro que têm -1 na coluna Raiz são redirecionadas para HKEY_CURRENT_USER e, em uma instalação por computador, elas são direcionadas para HKEY_LOCAL_MACHINE. Em uma instalação por usuário, as entradas do registro que têm msidbRegistryRootClassesRoot (0) na coluna Raiz são redirecionadas para HKCU\Software\Classes e, em uma instalação por computador, são direcionadas para HKLM\Software\Classes.
Use a propriedade ProgramFilesFolder na tabela Directory dos Pacotes do Windows Installer de 32 bits para especificar os locais de diretórios que contêm componentes de 32 bits não compartilhados entre aplicativos. Quando um usuário instala o pacote de uso duplo com o contexto por computador, esses componentes são salvos na pasta Program Files nas versões de 32 bits do Windows e na pasta Arquivos de Programas (x86) nas versões de 64 bits do sistema. Os componentes nesses diretórios podem ser acessados por todos os usuários. Quando um usuário instala o pacote de uso duplo no Windows 7 ou no Windows Server 2008 R2 com o contexto por usuário, esses componentes são salvos na pasta Programs do usuário atual (por exemplo, em %LocalAppData%\Programs) e só podem ser acessados por esse usuário.
Use a propriedade CommonFilesFolder na tabela Directory dos Pacotes do Windows Installer de 32 bits para especificar os locais de diretórios que contêm componentes de 32 bits compartilhados entre aplicativos. Quando um usuário instala o pacote de uso duplo com o contexto por computador, esses componentes são salvos na pasta Common Files e podem ser acessados por todos os usuários. Quando um usuário instala o pacote de uso duplo no Windows 7 ou no Windows Server 2008 R2 com o contexto por usuário, esses componentes são salvos na pasta Common do usuário atual (por exemplo, em %LocalAppData%\Common) e só podem ser acessados por esse usuário.
Use a propriedade ProgramFiles64Folder na tabela Directory dos Pacotes do Windows Installer de 64 bits para especificar os locais de diretórios que contêm componentes de 64 bits não compartilhados entre aplicativos. Quando um usuário instala o pacote de uso duplo com o contexto por computador, esses componentes são salvos na pasta Program Files. Os componentes nesses diretórios podem ser acessados por todos os usuários. Quando um usuário instala o pacote de uso duplo no Windows 7 ou no Windows Server 2008 R2 com o contexto por usuário, esses componentes são salvos na pasta Programs do usuário atual (por exemplo, em %LocalAppData%\Programs) e só podem ser acessados por esse usuário. Para obter mais informações sobre como criar um pacote para instalar um aplicativo em sistemas operacionais de 64 bits, confira Windows Installer em sistemas operacionais de 64 bits.
Use a propriedade CommonFiles64Folder na tabela Directory dos Pacotes do Windows Installer de 64 bits para especificar os locais de diretórios que contêm componentes de 64 bits compartilhados entre aplicativos. Quando um usuário instala o pacote de uso duplo com o contexto por computador, esses componentes são salvos na pasta Common Files e podem ser acessados por todos os usuários. Quando um usuário instala o pacote de uso duplo no Windows 7 ou no Windows Server 2008 R2 com o contexto por usuário, esses componentes são salvos na pasta Common do usuário atual (por exemplo, em %LocalAppData%\Common) e só podem ser acessados por esse usuário.
Use a propriedade ProgramFilesFolder e CommonFilesFolder na tabela Directory dos Pacotes do Windows Installer de 64 bits para especificar os locais de diretórios que contêm componentes de 32 bits. Use nomes diferentes para as versões de 32 bits e 64 bits dos componentes fornecidos com o mesmo nome ou, como alternativa, salve as versões em pastas diferentes. Por exemplo, adicione informações à tabela Directory para especificar o local do diretório que contém a versão de 32 bits como [ProgramFilesFolder]\ISV Name\Application Name\x86 e o local do diretório que contém a versão de 64 bits como [Program64FilesFolder]\ISV Name\Application Name\x64. Uma instalação por computador salva a versão de 32 bits em Program Files(x86)\ISV Name\Application Name\x86 e salva a versão de 64 bits em Program Files\ISV Name\Application Name\x64. Uma instalação por usuário salva a versão de 32 bits em %LocalAppData%\Programs\ISV Name\Application Name\x86 e instala a versão de 64 bits em %LocalAppData%\Programs\ISV Name\Application Name\x64.
Armazene os dados de configuração por usuário do aplicativo em \Users\username\AppData.
Armazene os modelos e arquivos gerados pelo aplicativo nas subpastas em \Users\username.
Se o aplicativo usar extensões de shell, você deve usar os pontos de extensibilidade de shell compatíveis com o contexto por usuário que estão disponíveis a partir do Windows 7 ou do Windows Server 2008 R2.
Não use ações personalizadas no seu pacote que exijam privilégios elevados para execução. A tabela CustomAction não deve conter ações personalizadas marcadas para serem executadas com privilégios elevados. Para obter mais informações sobre ações personalizadas elevadas, confira Segurança de Ação Personalizada.
Não grave nas pastas do sistema global. A tabela Directory não deve conter uma referência a nenhuma das propriedades da pasta do sistema a seguir.
AdminToolsFolder
CommonAppDataFolder
FontsFolder
System16Folder
System64Folder
SystemFolder
TempFolder
WindowsFolder
WindowsVolume
- Não instale um assembly do Common Language Runtime no GAC (cache de assembly global). Para obter mais informações sobre como instalar assemblies no cache de assembly global, confira Como adicionar assemblies a um pacote e Instalação de assemblies do Common Language Runtime.
- Não instale fontes de dados ODBC. Não use a tabela ODBCDataSource para instalar uma fonte de dados.
- Não instale serviços. Não use a tabela ServiceInstall para instalar um serviço.
Exemplo
Um exemplo de um pacote de uso duplo é fornecido nos Componentes do SDK do Windows para desenvolvedores do Windows Installer como o arquivo PUASample1.msi. Se você tiver o SDK atual, terá acesso a todas as ferramentas e dados necessários para reproduzir o pacote de instalação de exemplo. Para obter mais informações sobre este exemplo, confira Exemplo de criação de pacote único.