Domanda

Dopo troppi esperimenti, sono giunto alla conclusione che Windows Installer è semplicemente cattiva tecnologia. Ma i clienti vogliono file MSI.

Quindi, come posso creare un file MSI che estrae un file EXE in una directory temporanea e lo gestisce con le opzioni uguali o simili come sono stati passati al file EXE?

Opzioni per un MSI sono spiegate in Msiexec (opzioni della riga di comando ) (basso livello "run" di MSI è msiexec Package.msi opzione).

EDIT: soluzione WiX di mjmarsh sembra che funziona. Io non ho avuto la possibilità di provare ancora (tempo di crisi). Se funziona, sarò accettarla.

EDIT: non funziona. pezzo mancante:. frequentato / incustoditi non sembra essere disponibile

In ogni caso, l'unico a fare questo lavoro a tutti sarebbe per l'azione personalizzata di uccidere il suo processo padre!

EDIT: Così qualcuno ha postato come ulteriore risposta avvolgendo il tutto come un-installazione dopo un'azione personalizzata. Teoricamente possibile, ma dal momento che un riavvio può essere necessario (grazie MS for .NET 4 che richiede un riavvio a volte) che dobbiamo fare ulteriori aggiustamenti. Così dalla matrice di vantaggi:

Transparency: No. One big custom action.
Customizability: No.
Standardization: No. 
Management and reporting: No. Appears to work but will not.
Security: No benefit.
Validation: No. The hackery required to survive reboot makes this sure to not work.
Resiliency: Completely defeated.
Rollback: No. Rollback didn't work when we were using MSI anyway.
Patching & Updates: No. We have a local solution anyway.
Logging: No. Appears to work but will not.

Nessun punto.

È stato utile?

Soluzione 4

Nessuna soluzione. Siamo andati NSIS come aziendale MSI installazione sta per essere rotto in ogni caso a causa di MSI problema nidificazione (solo cercare l'installazione EXE avvolgendo MSI dall'interno MSI giorno).

Altri suggerimenti

Beh, c'è il via libera e the $$$ modo. Non posso documentare tutto qui, ma questo dovrebbe iniziare.

Una nota a parte, sì, Windows Installer è una tecnologia esasperante. Ci sono molte volte in cui penso che un compito sarà semplice, ma diventa realtà complicata. È sicuramente per immergersi per capirlo.

In ogni caso, ecco qui:

Free: WiX ( qui )

Questo è uno strumento gratuito per generare i file MSI da un insieme di file di configurazione XML. Vi lascio per esercitazioni in linea, ma qui è il punto cruciale:

È possibile comprimere il file EXE nel programma di installazione utilizzando il seguente tag nel file WXS:

<Binary Id="MYEXE" src="<path to my exe?"/>

Quindi è possibile creare un'azione personalizzata che lancia il file EXE:

<CustomAction Id="EXECA_CALLMYEXE" Return="check" Execute="deferred" BinaryKey="MYEXE"
      ExeCommand="my command line"/>

Poi si inserisce l'azione personalizzata nella InstallExecuteSequence nel punto appropriato (ho quasi sempre eseguito da qualche parte tra il mio InstallInitialize e InstallFinalize)

<InstallExecuteSequence>
   <Custom Action="EXECA_CALLMYEXE" After="InstallInitialize"><![CDATA[Not REMOVE]]></Custom>

$$$: Get InstallShield ( QUI )

Per prima cosa creare un progetto di "Basic MSI" e assicurarsi che dici che vuoi non setup.exe generato . È possibile impostare questo nelle impostazioni di uscita.

Quindi è sostanzialmente fare la stessa cosa con WiX, ma si dispone di un'interfaccia utente per esso.

  • È possibile specificare il file EXE aiuto utilizzando l'editor diretto e mettere il file EXE nella tabella del 'binario'
  • È possibile creare un'azione personalizzata per lanciare il file EXE dal Nodo "Azioni personalizzate" nella struttura ad albero sulla sinistra
  • È possibile inserire l'azione personalizzata selezionando "Install Sequenze" e metterlo nel <=> da qualche parte tra <=> e <=> come ho detto prima.

Siamo spiacenti, non potrei essere più dettagliati, ma questo dovrebbe essere un buon inizio.

Penso che il modo più semplice per creare un file MSI è quella di utilizzare WiX .

Lezione 1 dal tutorial WiX è tutto ciò che serve per creare un semplice installazione.

Joshua, capisco la tua frustrazione molto bene. MSI è eccentrico a dir poco - un modo completamente nuovo di pensare la distribuzione. Eppure, corretta applicazione MSI offre la migliore distribuzione possibile, soprattutto per i clienti aziendali.

Che cosa fa il tuo operazioni EXE di installazione eseguire? E 'in gran parte di copia file, un po' di registrazione COM e alcuni registro scrive, o lo fa funzionare la logica complessa installazione, creazione di banche dati, ecc ...? Il motivo che mi chiedo è perché probabilmente sarebbe molto veloce per creare un ben funzionante WIX MSI per voi in modo da poter abbandonare l'approccio EXE.

E 'infatti possibile eseguire un EXE da all'interno di un MSI, ma richiede una corretta sequenza, ed è garantito a causare più di un semplice blues, MSI. Se l'applicazione è piccola, e non fare nulla pazzo durante l'installazione, sarei felice di fornirvi una base di conversione WIX.

C'è anche un versione gratuita del MSI Wrapper . Supporta anche disinstallare e gli aggiornamenti. Inoltre, crea una sola voce nei programmi di Installazione.

In aggiunta a weir's risposta, modificare il custom action attribute come di seguito:

<!--Run Action-->
    <CustomAction Id="RunWrappedExe"
                  Return="asyncNoWait"
                  FileKey="ApplicationFileId"
                  Execute="deferred"
                  ExeCommand=""
                  HideTarget="no"
                  Impersonate="yes"/>

Impostazione Return=asyncNoWai non attendere il exe di tornare. L'installatore fa il suo lavoro e si chiude normalmente. Nel frattempo, il <=> continua la sua esecuzione.

-Madhuresh

Se non si desidera gestire MSI, ma solo eseguire EXE, provare Exe per MSI Converter free . Basta mettere nel percorso per il file EXE e ottenere un MSI.

provare questo:

Nel pacchetto MSI, v'è una chiamata comportamento "Avviare un'applicazione dopo l'installazione", significa che il file exe verrà eseguito dopo l'installazione MSI (MSI è chiuso).

Prova a eseguire l'exe lì, così quando il vostro exe invocano altri pacchetti MSI, non sarà in conflitto con il primo.

Wix può farlo. Qui è il mio codice di esempio per Wix 3.5:

<?xml version='1.0'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
   <Product Id='*' UpgradeCode="11111111-2222-3333-4444-555555555555" 
        Name='My Setup' Language='1033' Version='1.0.0.0' 
        Manufacturer='Your company'>

    <Package Description='pak' InstallerVersion='200' Compressed='yes' />

    <Media Id='1' Cabinet='setup.cab' EmbedCab='yes' />

    <Directory Id='TARGETDIR' Name='SourceDir'>
        <Directory Id="TempFolder">
            <Directory Id="INSTALLLOCATION" Name="~_tmpdir">
                <Component Id='MyComponent' DiskId='1' Guid=''>
                    <File Id="File0" Name="setup.exe" Source="setup.exe" />
                    <File Id="File1" Name="file1.txt" Source="file1.txt" />
                </Component>
            </Directory>
        </Directory>
    </Directory>

    <Feature Id='InstallFeature' Title='Install Feature' Level='1'>
        <ComponentRef Id='MyComponent' />
    </Feature>

    <!-- Run Action -->
    <CustomAction Id="RunWrapExe" Return="ignore" Execute="deferred" 
                  FileKey="File0" ExeCommand="setup.exe param here"  
                  HideTarget="no" Impersonate="no" />

    <InstallExecuteSequence>
        <Custom Action="RunWrapExe" 
                After="InstallFiles">NOT REMOVE~="ALL"</Custom>
    </InstallExecuteSequence>

   </Product>
</Wix>

ho avuto lo stesso problema (involucro EXE, chiamare altri MSI dal EXE di installazione inclusi .net, ecc), e qui è la mia soluzione:

I costruire l'exe di installazione utilizzando InstallAware. Ha un proprio Wrapper MSI che avvolge il file EXE generato con MSI.

Funziona OK, il file EXE può chiamare altri MSI senza alcun problema (tra cui l'installazione di .NET, altre configurazioni 3rd party), ma che è perché il lancio estremità MSI ( "restituisce") diritti dopo si lancia il file EXE di installazione, e in questo modo si evita la limitazione di MSI MSI ricorsiva chiama.

MA -. Alcuni clienti (aziende) che utilizza gli strumenti di distribuzione MSI, richiede l'MSI (msiexec) per tornare (fine) solo dopo che termina il processo di installazione, e questo è un problema con la soluzione di cui sopra

- per risolvere questo:

C'è un altro MSI Wrapper (exemsi.com) che genera MSI che restituisce solo dopo la fine della messa a punto di EXE, ma per l'utilizzo che è necessario utilizzare un'altra opzione unica di InstallAware:

InstallAware ha la possibilità di generare il setup EXE usando il loro proprio motore nativo, e non basato sul motore di Windows Installer, per evitare MSI limitazione ricorsiva. Combinare questi due, e si ha la soluzione perfetta.

Spero che questo vi aiuterà qualcuno, anche se sono trascorsi molti anni da quando questa domanda è stata pubblicata prima.

semplice trucco:

using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;

namespace Setup
{
    internal class Program
    {
        [DllImport("kernel32.dll")]
        private static extern IntPtr GetConsoleWindow();

        [DllImport("user32.dll")]
        private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

        private static void Main(string[] args)
        {
            ShowWindow(GetConsoleWindow(), 0);
            Stream st = Assembly.GetExecutingAssembly().GetManifestResourceStream("Setup.MSI.Temp.msi");
            string path = Path.Combine(System.IO.Path.GetTempPath(), "Temp.msi");
            using (var fileStream = new FileStream(path, FileMode.Create, FileAccess.Write))
            {
                st.CopyTo(fileStream);
            }
            Process p = new Process();
            p.StartInfo.FileName = path;
            p.Start();
            p.WaitForExit();
            File.Delete(path);
        }
    }
}

Ho fatto uno strumento semplice e gratuito .NET per creare MSI da exe o una cartella (che sta utilizzando wixsharp e Wix) http://legacy.averbouch.biz/free-msi-wrapper

screenshot

Nah uomo, basta usare wizard di Inno Setup. Si fa un file EXE di installazione, ma non un MSI. E 'come 5 minuti e avrete un'installazione di Windows.

scaricare , installarlo, puntare al vostro EXE, e seguire la istruzioni sullo schermo

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