как опустить компонент, когда мы пытаемся собрать .msi с помощью wix

У меня есть файл .exe и файл .dll (надстройка IE) в одном MSI. Когда пользователь устанавливает его в первый раз, оба файла будут установлены, а в программных файлах в указанной папке будут созданы .exe и .dll. Теперь я хочу предоставить обновление только для .dll (надстройка IE). Когда я снова создаю MSI с обновленным файлом .dll, как опустить файл .exe, чтобы он не загружался в MSI. Поскольку размер файла .exe очень велик, пользователю потребуется много времени для обновления MSI. Есть ли способ опустить компонент .exe во вновь сгенерированном msi или, пожалуйста, предложите мне другие способы добиться этого.

Product.wxs :

 <?xml version="1.0" encoding="UTF-8"?>
      <?define ProductVersion = "0.0.4"?>
    <?define ProductUpgradeCode = "d3170abf-b41c-4274-a3a0-85576052f35c"?>
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
      <Product Id="*" Name="saranSample" Language="1033" Version="$(var.ProductVersion)" Manufacturer="example" UpgradeCode="$(var.ProductUpgradeCode)">
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

        <MajorUpgrade DowngradeErrorMessage="A newer version of product is already installed." AllowSameVersionUpgrades="no" AllowDowngrades="no" />
        <MediaTemplate EmbedCab="yes" />

    <Upgrade Id="$(var.ProductUpgradeCode)">
      <UpgradeVersion Minimum="$(var.ProductVersion)" OnlyDetect="yes" 
     Property="NEWERVERSIONDETECTED"/>
      <UpgradeVersion Minimum="0.0.0" Maximum="$(var.ProductVersion)" IncludeMinimum="yes" IncludeMaximum="no" Property="OLDERVERSIONBEINGUPGRADED"/>
    </Upgrade>
    <InstallExecuteSequence>
      <Custom Action="Filecleaner" After="InstallFinalize"></Custom>
    </InstallExecuteSequence>
    <Condition Message="A newer version of this software is already installed.">NOT NEWERVERSIONDETECTED</Condition>

        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="saranSample_$(var.ProductVersion)">
          <Component Id="exeFiles" Guid="12345678-1234-1234-1234-222222222222">
            <File Id="exe" Source="$(sys.CURRENTDIR)npp.7.5.7.Installer.exe" KeyPath="yes"/>
          </Component>
          <Component Id="dllFiles" Guid="12345678-1234-1234-1234-222222222223">
            <File Id="dll" Source="$(sys.CURRENTDIR)saran.dll" KeyPath="yes"/>
          </Component>
        </Directory>
            </Directory>
        </Directory>

    <Feature Id="ProductFeature" Title="saranSample" Level="1">
      <ComponentRef Id="exeFiles"/>
      <ComponentRef Id="dllFiles"/>
    </Feature>

person saran    schedule 23.07.2018    source источник
comment
npp.7.5.7.Installer.exe - это просто образец файла, который вы включили, или вы действительно его устанавливаете? Это Блокнот++?   -  person Stein Åsmul    schedule 24.07.2018


Ответы (1)


Исправление. По сути, это то, для чего предназначено исправление — оно включает только «кусочки» MSI, которые изменились с момента последнего выпуска. , исключая все остальное содержимое бинарного дистрибутива.

Однако имейте в виду, что установка исправлений MSI очень сложна и, по сути, требует безупречных пакетов со 100% соответствием в отношении правила компонентов MSI, что, честно говоря, редко встречается в реальном мире (Роб Меншинг 101 о правилах компонентов — он создатель WiX). Чтобы преуспеть в этом, вам нужно быть очень осторожным в том, как вы делаете что-то в MSI, как в отношении дизайна компонентов, пользовательских действий (сложные условия, должны ли они выполняться во время исправления? И т. д...), так и в других вещах.

Исправление — это просто механизм распространения уже работающего обновления. Другими словами, вы можете упаковывать регулярные обновления MSI, такие как основные и второстепенные обновления, в виде исправлений. Хотя теоретически возможны крупные обновления, мне больше повезло с мелкими обновлениями, хотя незначительные обновления довольно сложно использовать в реальный мир. Другая сторона этого заключается в том, что никакое количество патч-тестов или настроек не сработает, если исходный полный пакет выпуска не работал должным образом.

Попытка ответа. Таким образом, попытка ответа заключается в том, что вы действительно можете доставить меньший пакет исправлений дистрибутива на основе работающего обновления MSI, но заставить его работать должным образом не сложно, и, вероятно, не рекомендуется, если у вас ограниченный опыт работы с MSI и ограниченное время, чтобы сосредоточиться на изучении всех тонкостей технологии. I guess you have to ask yourself how important this small distribution package really is in a world of broadband internet and fast computer I/O?

Если бы мне пришлось внедрить это исправление, я бы использовал исправление для незначительного обновления и установил бы исправление так, чтобы оно не использовало исправление на уровне битов. Это означает, что включаются только целые файлы вместо бинарного различия предыдущего и нового бинарных файлов, что я считаю ненужной сложностью и риском. Идея состоит в том, чтобы сделать патч более надежным (Why? What happens with bit-level patching when the file in question is signed? Frankly I have no idea).

Технические подробности: Время признания: несмотря на все мои годы работы с MSI, я никогда не использовал WiX для создания исправлений. Я использовал Installshield и Wise для создания исправлений, и последний мне помог (Wise). Чтобы использовать WiX для создания исправлений, ресурс, о котором я знаю, для начала:


Некоторые избранные ссылки:

Ссылки Microsoft:

Дополнительные ссылки:

person Stein Åsmul    schedule 23.07.2018