So installieren Sie zwei MSI-Paketen mit MSI-Paket mithilfe von WIX?

Habe ich ein Szenario für die Installation von zwei MSI-Paketen mit MSI-Paket.

Zum Beispiel haben wir zwei Produkte zu installieren, viz. Sample1.MSI und Sample2.MSI.
Wir müssen einbetten Sample2.MSI-Paket in Sample1.MSI.
Wenn wir installieren Sample1.MSI installieren, sollte es sowohl Sample1.MSI und Sample2.MSI und dies sollte zwei Einträge Hinzufügen oder Entfernen Programme (appwiz.cpl).

Nach einer Suche fand ich eine Beispiel-app, die mit 'EmbeddedChainer' - tag, das richtig funktioniert mit der installation. Aber es ist nicht richtig deinstallieren.

    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder">
            <Directory Id="INSTALLLOCATION" Name="SampleSetup">

      <Component Id="InstallMSIComponent" Guid="{7091DE57-7BE3-4b0d-95D5-07EEF6463B62}">
        <File Id="ChainRunner.exe" Name="ChainRunner.exe"
              Source="C:\ChainRunner.exe"
              DiskId="1" KeyPath="yes"/>
        <File Id="TestFile.txt" Name="TestFile.txt" Source="TestFile.txt" />
        <File Id="Microsoft.Deployment.WindowsInstaller.dll" Name="Microsoft.Deployment.WindowsInstaller.dll" Source="C:\Microsoft.Deployment.WindowsInstaller.dll"/>
        <File Id="Microsoft.Deployment.WindowsInstaller.xml" Name="Microsoft.Deployment.WindowsInstaller.xml" Source="C:\Microsoft.Deployment.WindowsInstaller.xml"/>          
        <RemoveFolder Id='INSTALLLOCATION' On='uninstall' />
      </Component>

      <Component Id="SampleSetup2Component" Guid="{CB568AA4-9790-4efd-91BB-82682F063321}">
        <File Id="SampleSetup2.msi" Name="SampleSetup2.msi"
              Source="SampleSetup2.msi"
              DiskId="1" KeyPath="yes"/>      
      </Component>
            </Directory>
        </Directory>
    </Directory>
<EmbeddedChainer Id="Chainer" FileSource="ChainRunner.exe"/>

    <Feature Id="ProductFeature" Title="SampleSetup" Level="1">

  <ComponentRef Id="InstallMSIComponent"/>
  <ComponentRef Id="SampleSetup2Component"/>

        <ComponentGroupRef Id="Product.Generated" />
    </Feature>

ChainRunner code

public class CustomActions
{

    static void Main(string[] args)
    {

        try
        {
            IntPtr ptr = new IntPtr(Convert.ToInt32(args[0], 16));
            ptr = System.Runtime.InteropServices.Marshal.StringToCoTaskMemAuto(args[0]);
            Transaction transaction = Transaction.FromHandle(ptr, true);
            transaction.Join(TransactionAttributes.JoinExistingEmbeddedUI);

            Installer.InstallProduct(@"C:\SampleSetup2.msi", "");
            transaction.Commit();
            transaction.Close();
        }
        catch (Exception e)
        {

            Console.WriteLine("Exception in Installation:"+e.Message+"\n"+e.StackTrace.ToString());
            Console.ReadKey();
            throw e;
        }
    }
    [CustomAction]
    public static ActionResult CustomAction1(Session session)
    {
        session.Log("Begin CustomAction1");

        return ActionResult.Success;
    }
}

Wo wurde dieses Durcheinander?

Bitte um Rat ob es irgendeine andere beste Weg, anders als dieser Ansatz?

InformationsquelleAutor DBalaji | 2013-04-04
Schreibe einen Kommentar