Wix серьезное обновление - PullRequest
11 голосов
/ 28 января 2009

Как использовать WIX, чтобы предотвратить перезапись файла конфигурации во время «крупного обновления»?

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

Спасибо

Ответы [ 3 ]

17 голосов
/ 28 января 2009

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

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

4 голосов
/ 28 января 2009

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

например.

<Component Id="myComp" Guid="myguid" NeverOverwrite="yes">
0 голосов
/ 28 января 2009

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

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

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

...