Основное обновление Wix

Как использовать WIX для предотвращения перезаписывания файла конфигурации во время "Major Upgrade"?

Я хочу, чтобы файл был установлен при первоначальной установке, удален при удалении и оставлен без изменений в разделе "Основное обновление".

Спасибо

Ответ 1

Самый простой способ - запланировать удаление RemoveExistingProducts после InstallExecute или InstallFinalize. Таким образом, файл конфигурации не будет удален, а затем снова установлен (например, если вы планируете до InstallInitialize). Конечно, планирование RemoveExistingProduct так поздно означает, что вам нужно быть очень осторожным в отношении ваших правил компонентов.

Мой личный фаворит заключается в том, чтобы рассматривать конфигурацию как "пользовательские данные" и вообще не иметь installtouch. Вы отправляете по умолчанию с приложением, но любые изменения вносятся пользователем в их личном профиле пользователя. Получает вас из всех видов неприятных проблем миграции, которые просто не решаются во время установки.

Ответ 2

Вы когда-нибудь хотели, чтобы он был перезаписан? Если не в таких случаях, я назначаю файлы конфигурации своим собственным компонентам и отмечаю их как Никогда не перезаписывать. Таким образом, обновление не перезапишет файл, но удаляет его.

например.

<Component Id="myComp" Guid="myguid" NeverOverwrite="yes">

Ответ 3

Вы можете использовать свойство UPGRADINGPRODUCTCODE, чтобы проверить, обновляетесь ли вы. Мы используем это, чтобы определить, следует ли нам запускать пользовательские действия "очистить":

<Custom Action="" After="CleanUpFiles">
  <![CDATA[REMOVE="ALL" AND NOT UPGRADINGPRODUCTCODE]]>
</Custom>

Я согласен с Rob, поскольку config - это пользовательские данные, хранящиеся в папках AppData и никогда не создаваемые MSI. Вместо этого он устанавливает значение по умолчанию (которое мы сохраняем как конфигурацию по умолчанию в файлах программ) и копируется самим приложением. Но мы не хотим оставлять эти вещи, загромождающие пользовательский компьютер, если они хотят удалить наш продукт, поэтому мы сделали CleanUpFiles, который ищет HD для любого оставленного мусора.