Frage

Nach dem viel zu vielen Versuchen habe ich zu dem Schluss gekommen, dass Windows Installer einfach schlechte Technologie ist. Aber die Kunden wollen MSI-Dateien.

Also, wie kann ich eine MSI-Datei erstellen, die eine EXE-Datei in ein temporäres Verzeichnis extrahiert und führt es mit den Optionen gleich oder ähnlich in Bezug auf die EXE-Datei übergeben wurden?

Optionen zu einem MSI erläutert in Msiexec (Befehlszeilenoptionen ) (low level "run" von MSI ist msiexec Option package.msi).

EDIT: mjmarsh der WiX Lösung sieht aus wie es funktioniert. Ich habe einfach nicht die Chance hatte, es zu versuchen noch (Crunch Time). Wenn es funktioniert, werde ich akzeptieren es.

EDIT: es funktioniert nicht. Fehlendes Stück. Besucht / unbeaufsichtigt scheint nicht verfügbar zu sein

Wie auch immer, die nur diese Arbeit machen überhaupt für die benutzerdefinierte Aktion wäre zu seinem übergeordneten Prozess zu töten!

EDIT: Also posted jemand als weitere Antwort, die ganze Sache als nach der Installation benutzerdefinierter Aktion wickeln. Theoretisch möglich, aber da ein Neustart (dank MS für .NET 4 erfordert einen Neustart manchmal) erforderlich sein, müssen wir weiter hackery tun. So aus der Matrix von Vorteilen:

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.

Kein Punkt.

War es hilfreich?

Lösung 4

Keine Lösung. Wir gingen NSIS als Corporate MSI installieren ist sowieso gehen, um gebrochen aufgrund MSI Verschachtelung Problem ( nur versuchen EXE Installation MSI Einwickeln von innen MSI eines Tages).

Andere Tipps

Nun, es ist die freie Art und Weise und die $$$ Art und Weise. Ich kann hier nicht alles dokumentieren, aber das sollte man beginnen.

Auf einer Seite zur Kenntnis, ja, ist Windows Installer eine aufreizend Technologie. Es gibt viele Male, wo ich denke, eine Aufgabe einfach sein wird, aber es wird tatsächlich kompliziert. Sie müssen auf jeden Fall tauchen Sie es zu verstehen.

Auf jeden Fall hier geht:

Free: WiX ( hier )

Dies ist ein kostenloses Tool MSI-Dateien aus einem Satz von XML-Konfigurationsdateien zu erzeugen. Ich werde Sie verlassen Tutorials online zu finden, aber hier ist der Knackpunkt:

Sie können Ihre EXE in das Installationsprogramm komprimieren, indem Sie den folgenden Tag in der WXS Datei mit:

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

Dann können Sie eine benutzerdefinierte Aktion erstellen, die Ihre EXE-Datei startet:

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

Dann legen Sie Ihre benutzerdefinierte Aktion in die InstallExecuteSequence in der entsprechenden Stelle (ich fast immer Mine irgendwo zwischen InstallInitialize und InstallFinalize laufen)

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

$$$: Get Install ( HIER )

Sie zuerst ein "Basic MSI" Projekt erstellen und stellen Sie sicher, dass Sie sagen, Sie wollen keine setup.exe erzeugt . Sie setzen diese in den Release-Einstellungen.

Dann tun Sie im Wesentlichen das Gleiche wie mit WiX, aber Sie haben eine Benutzeroberfläche für sie.

  • Sie können Ihre Helfer EXE-Datei angeben, indem Sie den Direct-Editor und Ihre EXE-Datei im ‚Binary‘ Tisch setzen
  • Sie können eine benutzerdefinierte Aktion erstellen, die EXE-Datei aus dem „Custom Actions“ Knoten im Baum auf der linken Seite
  • starten
  • Sie können die benutzerdefinierte Aktion einfügen, indem Sie auf „Install Sequences“ auswählen und es in der InstallExecuteSequence irgendwo zwischen InstallInitialize und InstallFinalize setzen, wie ich schon sagte.

Sorry, ich kann nicht mehr detailliert sein, aber dies sollte ein guter Anfang sein.

Ich denke, der einfachste Weg, eine MSI-Datei zu erstellen, ist WiX .

Lektion 1 von der WiX Tutorial ist alles, was Sie brauchen, ist ein erstellen einfach installieren.

Joshua, ich verstehe Ihre Frustration sehr gut. MSI ist etwas eigenartig, gelinde gesagt - eine völlig neue Art und Weise des Einsatzes zu denken. Noch angewandt wird, richtig MSI bietet den bestmöglichen Einsatz, vor allem für Firmenkunden.

Welche Operationen hat Ihr Installateur EXE ausführen? Ist es weitgehend zu kopieren, eine COM-Registrierungsdatei und einige Registry schreiben, oder es komplexe Installationslogik, die Einrichtung von Datenbanken usw. läuft ...? Der Grund, warum ich frage ist, weil es wahrscheinlich sehr schnell sein würde für Sie eine gut funktionierende WIX MSI zu erstellen, so dass Sie den EXE-Ansatz verlassen können.

Es ist in der Tat möglich, eine EXE aus dem Innern eines MSI zu laufen, aber es erfordert die richtige Sequenzierung, und es wird garantiert, dass Ihnen mehr Blues als eine einfache MSI verursachen. Wenn die App klein ist, und verrückt während der Installation etwas zu tun nicht, ich würde gerne mit einer grundlegenden WIX Umwandlung zur Verfügung zu stellen.

Zusätzlich zu weir's Antwort, die custom action attribute wie unten ändern:

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

Einstellung Return=asyncNoWai wartet nicht auf die exe zurückzukehren. Der Installateur hat es die Aufgabe und schließt normalerweise. Inzwischen hat die exe kontinuierliche seine Ausführung.

-Madhuresh

versuchen Sie dies:

In MSI-Paket gibt es ein Verhalten Aufruf „Starten Sie eine Anwendung nach der Installation“, die Ihre EXE-Datei bedeutet, wird nach der MSI-Installation ausgeführt werden (das MSI ist geschlossen).

Versuchen Sie, Ihre exe dort auszuführen, so dass, wenn Ihre exe anderen MSI-Pakete aufrufen, wird es nicht mit dem ersten Konflikt stehen.

Wix kann es tun. Hier ist mein Beispielcode für 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>

Ich habe das gleiche Problem (wrap EXE, rufen andere MSI aus der EXE einschließlich .NET Setup, etc.), und hier ist meine Lösung:

Ich baue das Setup exe mit InstallAware. Es hat seinen eigenen MSI-Wrapper, der die erzeugte EXE mit MSI einwickelt.

Es funktioniert OK, kann die EXE andere MSIs aufrufen, ohne jedes Problem (einschließlich .NET Setup, andere 3rd-Party-Setups), aber das liegt daran, dass die Einführung MSI Enden ( "returns") Rechte, nachdem es das Setup EXE-Datei startet, und auf diese Weise sie die MSI Einschränkung der rekursiven MSI vermeiden nennt.

-. Einige Kunden (Unternehmen), die MSI-Bereitstellungstools verwendet, erfordern das MSI (msiexec) zurückzukehren (Ende) erst nach dem Installationsvorgang beendet ist, und das ist ein Problem mit der obigen Lösung

So - lösen diese:

Es gibt eine andere MSI Wrapper (exemsi.com), die MSI erzeugt, die erst nach der EXE-Setup zurück endet, aber für die Verwendung, dass Sie eine weitere einzigartige Möglichkeit, InstallAware verwenden müssen:

InstallAware hat die Möglichkeit, den EXE-Setup mit ihrem eigenen Mutter Motor zu erzeugen, und nicht auf Basis von Windows Installer-Modul, MSI rekursive Einschränkung zu vermeiden. Kombinieren Sie jene beiden, und Sie haben die perfekte Lösung.

Hope dies jemanden helfen wird, obwohl viele Jahre wurde zum ersten Mal veröffentlicht, da diese Frage übergeben.

Einfacher Trick:

Bildprojekt

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);
        }
    }
}

Ich habe ein einfaches und kostenloses Tool .NET erstellen MSI aus exe oder einem Ordner (es wixsharp und Wix mit) http://legacy.averbouch.biz/free-msi-wrapper

Screenshot

Nah Mann, benutzen Sie einfach Zauberers Inno Setup. Es macht eine EXE-Setup aber nicht ein MSI. Es ist wie 5 Minuten und Sie erhalten eine Windows Installer haben.

es herunterladen, installieren, zeigen Sie es auf Ihre EXE, und folgen Sie den auf dem Bildschirm

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top