Как Wix решает установить определенный файл?
Как я положил в заголовке, вопрос в том, как Wix решает установить определенный файл?
Итак, у меня есть exe-файл, и когда я изменяю что-то в exe-файле и перестраиваю его, он не будет переустанавливаться, если я не изменю версию. Но если я что-то изменю в файле ресурсов, файл ресурсов будет заменен, даже если я не изменю версию своего приложения. Так как wix решает, нужно ли ему заменять файл во время обновления или нет.
Я использую wix3.9. MajorUpgrade - это расписание после InstallFinalize.
1 ответ
Версионные файлы заменяются в зависимости от версии файла, да, но файлы данных заменяются в зависимости от того, указали ли вы хэш файла или нет. Я думаю, что WiX генерирует файловые заголовки по умолчанию, так что это правило перезаписи:
https://msdn.microsoft.com/en-us/library/aa370532(v=vs.85).aspx
и это правило установщика Windows, которое применяется ко всем настройкам MSI, а не к решению WiX.
PS afterInstallFinalize не идеальное место. afterInstallExecute более безопасен, и он будет иметь тот же общий результат. Проблема в том, что после InstallFinalize означает, что новый продукт установлен. Если при удалении старого продукта произойдет сбой и произойдет откат, в конечном итоге будут установлены как старые, так и новые продукты, иначе известные как беспорядок. afterInstallExecute делает все, что входит в транзакцию, таким образом, вы устанавливаете оригинальный продукт, если не удается удалить его.