Как опустить компонент, когда мы пытаемся собрать.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>
1 ответ
Патчирование: это, по сути, то, для чего патчирование - оно включает только "кусочки" MSI, который изменился со времени последнего выпуска, исключая весь другой контент из бинарного дистрибутива.
Тем не менее, имейте в виду, что исправление MSI очень сложно и, по сути, требует безупречных пакетов со 100% соответствием правилам компонентов MSI - что на самом деле редко встречается в реальном мире (у Роба Меншинга 101 по правилам компонентов - он WiX) создатель). Чтобы преуспеть в этом, вам нужно быть очень осторожным, как вы делаете вещи в MSI, как в отношении дизайна компонентов, пользовательских действий (сложные условия, должны ли они выполняться во время исправления? Etc...), так и других вещей.
Исправления - это просто механизм распространения для обновления, которое уже работает. Другими словами, вы можете упаковать регулярные обновления 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 для создания патчей, ресурс, с которого я знаю, начать с этого:
- http://wixtoolset.org/documentation/manual/v3/patching/ (официальная документация WiX).
- https://www.firegiant.com/wix/tutorial/upgrades-and-modularization/patchwork/
Некоторые избранные ссылки:
- Простое исправление чисто WiX с помощью Melt
- Обновления и исправления установщика Windows (с http://installsite.org/)
- Обновленные инструкции по сборке патчей с использованием новой системы сборки патчей WiX v3.0
- Добавьте отсутствующий файл с патчем msp (возможно, более краткое изложение того, что я написал выше)
- Практические советы по патчированию (скорее специальные)
- MSP против упаковки MSI. Что использовать для патчей?
Ссылки Microsoft:
- https://docs.microsoft.com/en-us/windows/desktop/msi/patching
- https://docs.microsoft.com/en-us/windows/desktop/msi/creating-a-patch-package
- https://docs.microsoft.com/en-us/windows/desktop/msi/what-happens-if-the-component-rules-are-broken
Дополнительные ссылки:
- Правила для компонентов
- Использование основных обновлений для патчей
- MSP не заменяет определенный файл
- не работает исправление удаления патча, разработанного с помощью InstallShield
- исправление с использованием чисто WIX
- Более Совет по исправлению (общий)
- Исправление WiX не обновляет файлы правильно