Как установить два пакета MSI с одним пакетом MSI с помощью WIX?

У меня есть сценарий установки двух пакетов MSI с одним пакетом MSI.

Например, у нас есть два продукта для установки, а именно. Sample1.MSI и Sample2.MSI. Нам нужно встроить пакет Sample2.MSI в Sample1.MSI. Если мы установим Sample1.MSI, он должен установить как Sample1.MSI, так и Sample2.MSI, и это должно создать две записи в Добавить или удалить программы (appwiz.cpl).

После поиска я нашел образец приложения, в котором используется тег EmbeddedChainer, который правильно работает при установке. Но он не удаляется должным образом.

    <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

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

Где то это лажа?

Пожалуйста, посоветуйте, есть ли другой лучший способ, кроме этого подхода?


person DBalaji    schedule 04.04.2013    source источник


Ответы (1)


Вы можете использовать Wix Burn для создания установочного пакета, содержащего несколько установщиков приложений:

person vemcaster    schedule 24.05.2013