Domanda

Sto creando un pacchetto MSI per l'applicazione che ha un prerequisito per l'installazione. Sto usando Visual Studio 2005 avvio automatico per questo compito. A tal fine, ho fatto quanto segue: Trova la cartella C: \ Programmi \ Microsoft Visual Studio 8 \ SDK \ v2.0 \ BootStrapper \ Packages \ e ha creato una cartella per il mio presupposto (reso stessa struttura 'dotnetfx'); creato il 'product.xml' e 'package.xml' e posizionato in modo appropriato. Ho mantenuto i file XML molto semplice finora per verificare l'installazione:

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>

Ora posso aggiungere il presupposto dall'elenco e costruire il mio progetto di installazione.

Il problema:

L'uscita build è la 'setup.exe', il pacchetto 'MyApp.msi', più la sottocartella chiamata 'MyPrereq', che contiene 'MyPrereq.exe'.

Vorrei che la build per creare un 'setup.exe' e un unico 'MyApp.msi', che conterrebbe il 'MyPrereq' interno, senza ulteriori file / directory.

So che il framework .NET è un altro prereq per la mia app, ed è incluso nella stessa MSI, in modo che dovrebbe essere possibile in qualche modo.

Come posso raggiungere questo obiettivo?

È stato utile?

Soluzione

È possibile creare un programma di installazione autoestraente con strumenti come IExpress (venendo con Windows) contenente tutti i file in un unico file eseguibile (vedi questo SO distacco ).

Non è possibile avere un file MSI installa le sue proprie pre-requisiti. In primo luogo, perché Windows Installer per sé è un pre-requisito (e deve essere installato da un exe non MSI) e in secondo luogo perché le installazioni di Windows Installer sono transazionali e non supportano l'esecuzione incatenato di file MSI. Ciò significa che un'installazione MSI non è possibile avviare un'altra installazione MSI. Di conseguenza, nessun pre-requisiti devono essere installati da un bootstrapper separata (a proposito, l'installazione non è più transazionale - i pre-requisiti non otterrà disinstallato se l'installazione MSI non riesce).

Sembra che ci sia una base mis-comprensione circa il meccanismo di avvio automatico però. Il programma di avvio automatico può attualmente essere generato solo da Visual Studio o MSBuild. Per quanto ne so non è possibile con WiX. Cercare il compito GenerateBootstrapper in MSBuild (vedi questo SO distacco ).

Altri suggerimenti

Sono riuscito a farlo con IExpress.

Abbiamo dovuto usare un piccolo trucco, però, che è descritto qui Creazione di un programma di avvio automatico per un'applicazione VS Shell

  

Purtroppo, il compito MSBuild   non fornisce la possibilità di avere la   l'uso delle risorse di configurazione   installatori prerequisiti presenti nel   bersaglio directory, quindi è necessario manualmente   aggiornare il file di risorse adeguate   per rimuovere il percorso hard-coded   cerca i presupposti di ogni   sub-directory con lo stesso nome.

     

  • Aprire il programma Setup.exe in Visual   Studio risorsa editor di
      
  • Fare doppio clic su   la risorsa di nome, SETUPCFG nel 41   cartella
      
  • Cerca la "Vs Shell \"   stringa e cancellare le due ricorrenze   che appaiono
      
  • Salvare il file di risorse   e l'eseguibile Setup.exe sarà   aggiornato automaticamente
      
  • Esegui IExpress   
  • Creare un nuovo pacchetto seguendo la   i passi di IExpress guidata e assicurarsi   per includere i seguenti file:
  • Il   file di MyVSShellApplication.msi
  • Il   file Setup.exe programma di avvio automatico
  • Il   file di vs_shell_isolated.enu.exe

  • Il problema era che bootstrapper mette i prerequisiti in una sottocartella, e IExpress non riconosce le sottocartelle. Bisogna stare attenti durante la modifica 'setup.exe' troppo, non ha ottenuto corretto al primo tentativo.

    Autorizzato sotto: CC-BY-SA insieme a attribuzione
    Non affiliato a StackOverflow
    scroll top