Pergunta

Estou usando o instalador VS2008 (além de uma ação personalizada do Orca) para criar um instalador para meu produto .NET.

Recentemente descobri que um dos assemblies de terceiros que eu estava usando é específico para x86 (pois inclui algum código nativo);portanto, os clientes x64 estavam tendo travamentos na inicialização com erros sobre o assembly não ser apropriado para sua plataforma.

Enviei a esse cliente uma cópia da versão x64 deste assembly de terceiros e disse a ele para apenas copiá-lo sobre o x86 existente.Funcionou, querido!Agora só preciso fazer com que o instalador faça isso por mim.

Na verdade, isso não parece trivial :(.Idealmente, eu só quero que o instalador (que seria x86, já que pode ser executado em ambas as plataformas) inclua as versões x86 e x64 deste assembly de terceiros e instale o apropriado.Em outras palavras, quero um único instalador que facilite a vida dos meus usuários.

Achei que tinha resolvido isso, usando instruções condicionais do MSI e tudo mais.Mas aparentemente não...Os projetos de configuração do VS2008 não serão compilados a menos que você especifique "x86" ou "x64". Se você especificar x86, ele fornecerá um erro de compilação dizendo que não pode incluir o conjunto X64.Se você especificar x64, o resultado não poderá ser executado em um computador x86.Droga!

Alguém deve ter tido esse problema antes.Infelizmente, o Google não ajuda, então recorro ao StackOverflow!

Foi útil?

Solução

Se bem entendi, você deseja fazer uma cópia de um arquivo se estiver instalando em x86 e um arquivo diferente (com o mesmo nome) se estiver instalando em uma plataforma x64.

Primeiro de tudo, você não pode criar um MSI para 2 plataformas diferentes, pois um MSI x64 simplesmente não funcionará em uma plataforma x86 e um MSI x86 será instalado usando WOW64 em uma plataforma x64.

Por outro lado, você PODE criar um MSI x86 que contenha 2 versões diferentes de um arquivo e copiar seletivamente o arquivo apropriado durante a instalação.

A maneira mais fácil é usar WIX (V3) em vez do gerador MSI VS2008 integrado.O WIX oferece muito mais controle sobre o que é instalado na máquina do cliente e onde, a capacidade de gerar diferentes instaladores para diferentes plataformas e suporte completo ao MSBuild como um bônus adicional.(ver http://wix.sourceforge.net para mais informações.)

Caso você esteja se perguntando se o WIX ainda está em versão beta, os arquivos MSI gerados estão perfeitamente OK e nunca encontrei um bug ainda.(E eu desenvolvo projetos de configuração para ganhar a vida.)

Finalmente, você pode verificar com a propriedade VersionNT64 se um instalador x86 está sendo executado em uma plataforma x64.Se essa propriedade estiver presente, você está executando x64, caso contrário, está executando em x86.

Espero que isto ajude.

Outras dicas

Quando analisei isso há um ano, cheguei à conclusão de que não era possível.É importante notar que muitos arquivos MSI fornecidos pela Microsoft vêm em versões x86 e x64 separadas - e, presumivelmente, eles entregariam apenas um único arquivo, se isso fosse possível.

Tive algum sucesso ao usar dois recursos para incluir seletivamente os dois conjuntos de arquivos (em componentes separados, é claro, com seus identificadores de arquivo individualizados!).

A instalação deve ser marcada como x32 para instalar em x32 e x64.Ele sempre será instalado nos diretórios x32 e será tratado em grande parte como um aplicativo de 32 bits executado no WOW.

Usando a propriedade VersionNT64 você pode determinar se uma instalação do Windows 64 está presente e instalar condicionalmente os arquivos necessários.

Não tenho certeza de quanto dessa funcionalidade está disponível nos projetos de instalação do VS2008 - estou usando algumas outras ferramentas comerciais para configurar o instalador dessa maneira.É claro que você também pode usar o Orca para fazer isso, embora não seja trivial fazê-lo funcionar com ferramentas comerciais e o Orca seja muito mais difícil.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top