Como instalar assemblies Win32 para compartilhamento lado a lado
A seção a seguir descreve como criar um pacote do Windows Installer para instalar um assembly Win32. O pacote instala um assembly lado a lado na pasta Winsxs para o uso compartilhado do aplicativo. Depois de instalar o pacote, o assembly compartilhado estará disponível globalmente para qualquer aplicativo que especifique uma dependência do assembly em um arquivo de manifesto do assembly. O instalador não registra o assembly lado a lado globalmente no sistema.
Observe que você pode instalar assemblies compartilhados lado a lado usando os módulos de mesclagem.
Antes de continuar, você deve entender como criar um pacote do Windows Installer sem assemblies. Para obter um exemplo de como criar uma instalação simples, confira Um exemplo de instalação.
Para instalar um assembly compartilhado lado a lado
- Defina um componente do Windows Installer que inclua o assembly Win32. Esse componente pode conter outros recursos que sempre devem ser instalados ou removidos com o assembly. Todos os outros componentes do aplicativo podem ser criados da mesma forma que para uma instalação sem assemblies. Adicione uma linha à tabela Component para o componente que contém o assembly Win32. Insira um GUID válido do Windows Installer para esse código de componente. Não use o arquivo de manifesto como o caminho da chave para esse componente.
- Adicione uma linha à tabela FeatureComponents que associa o componente a um recurso do Windows Installer. Para obter informações, confira Componentes e recursos. Um recurso do Windows Installer deve ser uma parte da funcionalidade do aplicativo reconhecível para um usuário. O assembly é ativado quando esse recurso é selecionado por um usuário ou falha em um aplicativo. Se o assembly definir um recurso adicional, adicione uma linha adicional à tabela Feature para os atributos de recurso. Esta etapa não é necessária ao criar um módulo de mesclagem.
- Para assemblies lado a lado, as informações de associação e ativação, como classes COM, interfaces e bibliotecas de tipos, são armazenadas em arquivos de manifesto em vez do Registro. Os assemblies compartilhar armazenam essas informações em um manifesto do assembly. Nos sistemas que dão suporte a assemblies lado a lado, o instalador ignora o processamento de qualquer informação sobre o componente inserido nas tabelas Extension, Verb, TypeLib, MIME, Class, ProgId e AppId. As informações de associação e ativação podem ser inseridas nessas tabelas para uso de sistemas que não dão suporte ao compartilhamento de assembly lado a lado.
- A instalação lado a lado não registra o assembly globalmente. O instalador ignorará o registro automático do componente, se as informações de registro automático forem inseridas na tabela SelfReg. As informações de registro automático podem ser inseridas na tabela SelfReg para o registro automático do componente nos sistemas que não dão suporte ao compartilhamento de assembly lado a lado.
- Adicione outras informações do Registro, exclusivas de associação e ativação ou registro automático do componente, às tabelas Registry, RemoveRegistry e Environment.
- Como esse é um assembly compartilhado, não gere um arquivo .local. Não inclua informações para esse componente na tabela IsolatedComponent. O instalador ignora a tabela IsolatedComponent para esse componente nos sistemas operacionais que dão suporte ao compartilhamento lado a lado. Adicione informações à tabela IsolatedComponent, se quiser que o assembly seja privado em sistemas compatíveis com arquivos .local.
- Para habilitar o compartilhamento lado a lado, o assembly Win32 deve ser instalado na pasta Winsxs. Isso é feito deixando a coluna File_Application da tabela MsiAssembly nula para o assembly. Isso instrui o instalador a instalar o assembly na pasta WinSxS, em vez da pasta do componente. Adicione uma linha à tabela MsiAssembly para o componente que contém o assembly Win32. Insira o valor 1 no campo Attributes da tabela MsiAssembly para especificar que esse é um assembly Win32. Para um assembly compartilhado, deixe o campo File_Application vazio. Adicione a ação MsiPublishAssemblies à tabela InstallExecuteSequence ou à tabela AdvtExecuteSequence. Adicione a ação MsiUnpublishAssemblies à tabela InstallExecuteSequence.
- Adicione linhas à tabela MsiAssemblyName para o componente. Adicione uma linha para cada par de nome e valor especificado na seção assemblyIdentity do manifesto. Para obter um exemplo, confira a tabela MsiAssemblyName.