Pergunta

Estou criando um pacote .msi para a aplicação que tem um pré-requisito para a instalação. Eu estou usando o Visual Studio 2005 Bootstrapper para esta tarefa. Para este fim, eu fiz o seguinte: Localizado a pasta C: \ Program Files \ Microsoft Visual Studio 8 \ SDK \ v2.0 \ BootStrapper \ Packages \ e criou uma pasta para o meu pré-requisito (tornou mesma estrutura que 'dotnetfx'); criado a 'product.xml' e 'package.xml' e colocou-os de forma apropriada. Eu mantive os arquivos XML muito simples até agora para testar a instalação:

product.xml

<?xml version="1.0" encoding="utf-8"?>
<Product ProductCode="MyPrereq" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper">
  <PackageFiles CopyAllPackageFiles="false">
    <PackageFile Name="MyPrereq.exe" />
  </PackageFiles>
  <InstallChecks>
  </InstallChecks>
  <Commands Reboot="None">
    <Command PackageFile="MyPrereq.exe" EstimatedInstallSeconds="90">
      <InstallConditions>
      </InstallConditions>
      <ExitCodes>
    <ExitCode Value="0" Result="Success"/>
        <DefaultExitCode Result="Fail" String="GeneralFailure" FormatMessageFromSystem="true" />
      </ExitCodes>
    </Command>
  </Commands>
</Product>

package.xml

<?xml version="1.0" encoding="utf-8"?>
<Package Name="MyPrereq" Culture="Culture" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper">
  <Strings>
    <String Name="Culture">en</String>
    <String Name="DisplayName">MyPrereq</String>
    <String Name="GeneralFailure">A fatal error occurred. The installation failed.</String>
  </Strings>
</Package>

Agora eu posso adicionar o pré-requisito da lista e construir o meu projeto de instalação.

O problema:

A saída da construção é o 'setup.exe', o pacote 'MyApp.msi', mais a subpasta chamada 'MyPrereq', que contém 'MyPrereq.exe'.

Gostaria que a compilação para criar um 'setup.exe' e um single 'MyApp.msi', que conteria o interior 'MyPrereq', sem arquivos / diretórios adicionais.

Eu sei que o .NET framework é outro pré-requisito para o meu aplicativo, e está incluído no mesmo .msi, de modo que deve ser possível de alguma forma.

Como posso conseguir isso?

Foi útil?

Solução

Você pode criar um instalador de extração automática com ferramentas como o IExpress (que vem com o Windows) contendo todos os arquivos em um único executável (veja este SO postagem ).

Você não pode ter um arquivo MSI instalar seus próprios pré-requisitos. Primeiro, porque o próprio Windows Installer é um pré-requisito (e deve ser instalado por um exe não MSI) e segundo porque as instalações do Windows Installer são transacionais e não suportam a execução encadeada de arquivos MSI. Isto significa basicamente que uma instalação MSI não pode iniciar outra instalação MSI. Como consequência, quaisquer pré-requisitos devem ser instalados por um bootstrapper separado (a propósito, a instalação não é mais transacional - os pré-requisitos não será desinstalada se a instalação MSI falhar).

Parece haver uma mis-compreensão básica sobre o mecanismo bootstrapper embora. O bootstrapper atualmente só pode ser gerado pelo Visual Studio ou MSBuild. Afaik não é possível com WiX. Olhar para a tarefa GenerateBootstrapper em MSBuild (ver este SO postagem ).

Outras dicas

Eu consegui fazer isso com IExpress.

Tive que usar um pequeno truque, no entanto, que é descrito aqui Criando um bootstrapper para uma aplicação VS Shell

Infelizmente, a tarefa MSBuild não fornece a opção para que o o uso de recursos de configuração instaladores de pré-requisitos encontrados no diretório de destino, então você deve manualmente atualizar o arquivo de recursos apropriado para remover o caminho codificados que procura por pré-requisitos em um sub-diretório de mesmo nome.

  • Abra o programa Setup.exe no Visual Studio recurso editor
  • Clique duas vezes em o recurso nomeado, SETUPCFG na 41 pasta
  • Procure o "Vs Shell \" corda e excluir as duas ocorrências que aparecem
  • Salve o arquivo de recurso eo executável Setup.exe será atualizados automaticamente
  • Executar iexpress
  • Criar um novo pacote, seguindo o passos e do assistente IExpress certifique-se para incluir os seguintes arquivos:
  • A arquivo MyVSShellApplication.msi
  • A arquivo bootstrapper Setup.exe
  • A arquivo vs_shell_isolated.enu.exe

  • O problema era que coloca bootstrapper os pré-requisitos para uma subpasta, e não IExpress não reconhecer subpastas. Tem que ter cuidado ao editar 'setup.exe' também não conseguiu correto na primeira tentativa.

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