Я разрабатываю основанный на WIX Instler для нашего продукта, который имеет базовый продукт и множество плагинов.База и плагин будут поставляться как отдельные MSI.Плагины могут быть установлены только при наличии базы.База и плагины совместно используют общее дерево папок в папке ROOT, например «C: \ Program files \ MyProduct».
Я использую пользовательские действия для удаления всех зависимых плагинов.Но плагины не удаляются должным образом.Это очень случайно.Несколько раз три плагина были удалены, а иногда только два плагина.Но я могу удалить плагины отдельно от «Установка и удаление программ».
Я использую следующие пользовательские действия ...
<Fragment>
<CustomAction Id='UninstallP1Action' Directory='SystemFolder' ExeCommand="[SystemFolder]MSIExec.exe /X {PRODUCT_CODE_HERE} /qn /l* $(env.windir)\Temp\p1.log" Execute='immediate' Return='asyncNoWait' />
<CustomAction Id='UninstallP2Action' Directory='SystemFolder' ExeCommand="[SystemFolder]MSIExec.exe /X {PRODUCT_CODE_HERE} /qn /l* $(env.windir)\Temp\p2.log" Execute='immediate' Return='asyncNoWait' />
<CustomAction Id='UninstallP3Action' Directory='SystemFolder' ExeCommand="[SystemFolder]MSIExec.exe /X {PRODUCT_CODE_HERE} /qn /l* $(env.windir)\Temp\p3.log" Execute='immediate' Return='asyncNoWait' />
<CustomAction Id='UninstallP4Action' Directory='SystemFolder' ExeCommand="[SystemFolder]MSIExec.exe /X {PRODUCT_CODE_HERE} /qn /l* $(env.windir)\Temp\p4.log" Execute='immediate' Return='asyncNoWait' />
<CustomAction Id='UninstallP4Action' Directory='SystemFolder' ExeCommand="[SystemFolder]MSIExec.exe /X {PRODUCT_CODE_HERE} /qn /l* $(env.windir)\Temp\p4.log" Execute='immediate' Return='asyncNoWait' />
</Fragment>
Я называю этот CA в моем скрипте продукта как ...
<!--Uninstall Plug-ins -->
<Custom Action='UninstallP1Action' After='InstallFinalize'>(REMOVE="ALL")</Custom>
<Custom Action='UninstallP2Action' After='UninstallP1Action'>(REMOVE="ALL")</Custom>
<Custom Action='UninstallP3Action' After='UninstallP2Action'>(REMOVE="ALL")</Custom>
<Custom Action='UninstallP4Action' After='UninstallP3Action'>(REMOVE="ALL")</Custom>
<Custom Action='UninstallP5Action' After='UninstallP4Action'>(REMOVE="ALL")</Custom>
Мои вопросы здесь
Как выполнить чистую деинсталляцию всех плагинов при удалении базы?
Журналы не создаются, если плагин отсутствует при удалении.Но журнал создан успешно, когда плагин удален правильно.Как это проверить?
Я знаю о создании функций (для разных плагинов) в рамках одного MSI.Но мы планируем поставлять плагины как отдельные MSI.Любой другой возможный способ, доступный в WiX?
Любая помощь будет очень признательна!