Недавно возникла проблема с установщиком Wix, настроенным как «серьезное обновление» для ранее установленного приложения. Приложение, уже установленное в системе, включало файл S7. Net .dll версии 1.0.0, а установщик, предназначенный для представления обновления, содержал dll с тем же именем (S7. Net .dll), но с версией 0.3.0 для установки в том же месте. Тем не менее, запуск установщика «upgrade», казалось, удалял файл версии 1.0.0, но никогда не заменял его версией 0.3.0.
Я изучил logi управления версиями файлов c, используемый установщиком ( ссылка ), и, если я правильно понимаю, установщик не должен был заменять файл, уже установленный в системе (v1.0.0), файлом из установщика "upgrade" (v0.3.0). Это понимание правильно? Я не уверен в этом, учитывая тот факт, что установщик «upgrade» включает в себя компонент MajorUpgrade
, который, по моему мнению, выполняет своего рода действие «удалить все» по умолчанию - по крайней мере, это то, что я интерпретировал, прочитав описание для свойство RemoveFeatures
в документации Wix . Но если выполняется «удалить все», то зачем сравнивать версии двух файлов?
В целом, правильно ли мое понимание логики управления версиями файлов c? Как насчет моего понимания свойства RemoveFeatures
компонента MajorUpgrade
Wix? И если да, то почему установщик «upgrade» удаляет существующую версию файла, но не заменяет ее?
Я включил компонент MajorUpgrade
, включенный в установщик, а также снимки экрана вкладки свойств. для каждого из упомянутых файлов DLL.
<MajorUpgrade
AllowDowngrades="no"
DowngradeErrorMessage="A newer version of [ProductName] is already installed."/>
![Properties of existing file v1.0.0.0](https://i.stack.imgur.com/R4THO.png)
![Properties of updated file v0.3.0](https://i.stack.imgur.com/0X7HK.png)