Bootstrapper: Como compilar a aplicação e pré-requisito no pacote .msi single?
-
05-09-2019 - |
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?
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.