Как установить плагин или надстройку с WiX

Мне нужно установить плагины (или дополнения) к приложению, которое мы пишем. Я пользователь WiX для установщика приложения. Плагин, на мой взгляд, необязательная часть приложения. Его необходимо интегрировать в структуру файловой системы приложения, но он также может быть добавлен позже, даже тем, у кого нет контроля над установщиком исходного приложения. Таким образом, я нахожу все стандартные механизмы WiX неадекватными: ни маленькое/второстепенное/крупное обновление, ни механизм исправлений, похоже, не вписываются в предпосылки, изложенные в предыдущей фразе. Поэтому я считаю, что лучший способ для меня - позволить исходному установщику оставить запись в реестре, указывающую каким-то образом, где устанавливать плагины, и создавать отдельные установщики для плагинов. Что оставляет открытым вопрос, как действовать при удалении, но это проблема, которую я могу решить позже. У кого-нибудь есть идея получше? Есть ли какие-то механизмы специально для этого в WiX, о которых я не знаю? Спасибо за совет, N-Man


person N-Man    schedule 27.08.2009    source источник


Ответы (2)


Ключ реестра — популярный способ решить эту проблему. Более ориентированный на установщика Windows способ создания каталога подключаемого модуля — использовать компонент для создания каталога подключаемого модуля, а другие использовать ComponentSearch для Component/@Guid.

Удаление плагинов одновременно с вашим приложением будет затруднено (вероятно, невозможно) без внешнего загрузчика/цепочки, управляющего вашим удалением. Гораздо проще полностью отделить удаление подключаемых модулей от приложения, чтобы их можно было удалять независимо.

person Rob Mensching    schedule 27.08.2009

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

Да, я считаю, что это стандартный подход. Ваш основной установщик приложения может оставить запись в реестре о том, где устанавливать плагины, например:

<Registry Id='WritePluginsLoc'
  Root='HKLM'
  Key='Software\Acme\Foo 1.x' 
  Name='PluginsLocation'
  Type='string'
  Action='write'
  Value='[PLUGINSFOLDER]' />

Затем установщик подключаемого модуля может получить запись реестра следующим образом:

<Property Id="PLUGINSFOLDER">
  <RegistrySearch Id='PluginsLocationSearch'
     Root='HKLM' 
     Key='Software\Acme\Foo 1.x'
     Name='PluginsLocation'
     Type='raw' />
</Property>

Боюсь, чтобы автоматически удалять плагины вместе с основным продуктом, вам придется написать собственный exe-файл деинсталлятора. Этот исполняемый файл должен знать, как найти коды продуктов MSI подключаемых модулей, и вызывать msiexec /x для каждого из них.

person Wim Coenen    schedule 27.08.2009