2017-01-12 11 views
0

Я использую WIX для кода моего установщика. Устанавливаемое приложение имеет файл базы данных, который необходимо удалить только после удаления и не трогать при ремонте, переустановке или обновлении.Как убедиться, что файл удален при удалении, а не при повторной установке, ремонте или обновлении?

Я закодировал как таковые:

 <Component Id='CompIDRemDataFile' Guid='{---gui--}'> 
      <RemoveFile Id="idRemDataFile" Name="program_database.db" On="uninstall" Property="MyDataFolderPath" /> 
      <RegistryValue Id="RegRemDataFile" Root="HKCU" Key="Software\My Company\App name" 
         Name="11352" Value="1" Type="integer" KeyPath="yes" /> 

Но я только что узнал, что если я перейти с более старой версией более поздним, этот файл также удаляются. Что я должен изменить, чтобы предотвратить это?

+0

Вы должны опубликовать WiX, что делает обновление, в частности секвенирование серьезной модернизации, потому что влияет как работает апгрейда. – PhilDW

+0

@PhilDW: Спасибо. Я не думаю, что у меня есть элемент MajorUpgrade. Можете ли вы объяснить, где мне это нужно и как его настроить? – c00000fd

ответ

1

Файл правило перезаписи включает тот, который говорит обновленные файлы данные не будут перезаписаны:

Neither file has a version

Это означает, что пластыри, ремонт и основные обновления виртуализированные после InstallExecute не заменят базу данных, которая имеют предположительно, обновлен. В установщике Windows нет «переустановки», поскольку один и тот же MSI не может быть установлен дважды - продукт перейдет в режим обслуживания.

WiX крупное обновление здесь:

Majorupgrade element

How to implement major upgrade

+0

Знаешь, я тоже это видел и пробовал, но я не могу понять, что такое WiX/MSI. Поэтому я закончил писать [настраиваемое действие] (http://stackoverflow.com/a/17608049/843732), где я могу контролировать все эти вещи из библиотеки C++. (По крайней мере, я знаю, что я там делаю.) – c00000fd