WiX EmbeddedChainer Примеры? - PullRequest
       21

WiX EmbeddedChainer Примеры?

4 голосов
/ 11 марта 2011

При Windows Installer 4.5 добавлена ​​новая таблица для MsiEmbeddedChainer Таблица. Эта таблица должна была разрешить установку нескольких пакетов. WiX добавил поддержку таблицы, создав элемент EmbeddedChainer . Я читал вики, но есть ли примеры того, как использовать этот элемент?

Я пытаюсь установить JRE перед моей программой.

Ответы [ 4 ]

2 голосов
/ 11 марта 2011

Встроенные цепочки работают только после установки установщика, который содержит их, и могут устанавливать только сырые MSI-файлы (MSI-файлы с их собственными загрузочными .exe-файлами не могут быть использованы), поэтому я не думаю, что вы будетевозможность установить JRE так, как вы хотите.

1 голос
/ 08 августа 2013

В коде c # есть ошибка: В строке "IntPtr ptr = new IntPtr (Convert.ToInt32 (args [0], 16));"«16» должно быть «10»!

В противном случае вы получите ошибки «плохой обработки», когда имеется более 10 транзакций (например, когда из встроенного цепочки вызывается пять или более sub msi).

1 голос
/ 22 августа 2011

Выполните следующие шаги:

Изменения в файле WXS: ...

                    <Component DiskId="1" Guid="5CE59096-E197-4694-8DC2-E8EB4601C7C5" Id="CHAINERRUN.EXE">
                        <File Id="CHAINERRUN.EXE" Name="ChainerRun.exe" Source="..\ClinAppChainers\bin\ChainerRun.exe" />
                        <File Id="MICROSOFT.DEPLOYMENT.WINDOWSINSTALLER.DLL" Name="Microsoft.Deployment.WindowsInstaller.dll" Source="C:\Program Files\Windows Installer XML v3.6\SDK\Microsoft.Deployment.WindowsInstaller.dll" />
                        <File Id="MICROSOFT.CSHARP.DLL" Name="Microsoft.CSharp.dll" Source="C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Microsoft.CSharp.dll" />
                        <File Id="SYSTEM.DLL" Name="System.dll" Source="C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.dll" />
                        <File Id="SYSTEM.CORE.DLL" Name="System.Core.dll" Source="C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Core.dll" />
                        <File Id="SYSTEM.XML.DLL" Name="System.Xml.dll" Source="C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Xml.dll" />
                        <File Id="SYSTEM.XML.LINQ.DLL" Name="System.Xml.Linq.dll" Source="C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Xml.Linq.dll" />
                    </Component>

...

    <EmbeddedChainer Id="ChainerRun" FileSource="CHAINERRUN.EXE" />

FileSource - это ссылка на идентификатор элемента File, определенный в компоненте

Создайте проект C #, обратитесь к файлу Microsoft.Deployment.WindowsInstaller.dll или создайте новый WIX «C # Custom action project», а затем измените вывод на EXE консольного приложения вместо DLL. Тело файла CS должно содержать основную функцию

ChainerRun.CS

namespace ChainerRun 
{
    public class CustomActions
    {
      static void Main(string[] args)
      {
        System.Diagnostics.Debugger.Launch();

        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:\MyOtherApp.msi", argline);

            transaction.Commit();
            transaction.Close();

        }
        catch (Exception e)
        {
            throw e;
        }
    }

    [CustomAction]
    public static ActionResult CustomAction1(Session session)
    {
        System.Diagnostics.Debugger.Launch();
        session.Log("My CustomAction1() begins ...");
    }
}
0 голосов
/ 31 мая 2015

Подход к встраиванию JRE как пакета в многопакетную транзакцию является излишним, что излишне усложняет обслуживание.

Существует два разумных решения с минимальным обслуживанием.

  1. Использованиезапишите и установите JRE как отдельный пакет в комплекте.Преимущество возможности использовать подготовленную установку, например, из Oracle.
  2. JRE по своей конструкции является версионной и не требует регистрации или специальной обработки, учитывая, что может быть лучше включить jre в основнуюПриложение MSI.Это практика, которую я видел во многих профессиональных Java-приложениях, и она имеет дополнительное преимущество, заключающееся в простом создании ярлыков приложений путем прямой ссылки на java.exe.
...