Версия 1.0 MyApp содержала файл foo.dll. Версия этого файла была версией 10.5.567. Теперь MyApp является версией 2.0, и версия foo.dll 2.0.123. Версия НИЖЕ, чем старая версия. Поставщик, который записал этот dll, решил пойти назад с номером версии файла. Это не решение, которое я могу изменить.
Как я заставляю WiX всегда устанавливать этот файл?
Действие RemoveExistingProducts планируется после действия InstallFinalize и также не может быть изменено.
InstallShield имел 'всегда перезапись' флаг, но я не думаю, что могу подражать этому, не изменяя поведение всех файлов через переключатель компилятора. Я не хочу это. Я просто хочу обновить ЭТОТ файл.
Я также попробовал
<RemoveFile Id="foo.dll" On="install" Name="foo.dll" />
Но это не работало также. Я заканчиваю тем, что получил 'Ошибку 2753 файл, foo.dll не отмечен для установки' позже.
Это непросто, потому что это противоречит стандартному поведению пакетов MSI. При компиляции вы должны установить supress-file-options с помощью -sf в light.exe. Тогда из ваших файлов не будет никакой информации о файлах. Вы можете установить DefaultVersion, эта версия будет использоваться.
Я также использовал RemoveFile
в решении, но могу сказать, что это работает. Я добавил его в тот же компонент, в который я добавляю файл.
<Component>
<File DiskId="1" Id="fooDLL" Name="foo.dll" Vital="yes"
DefaultVersion="$(var.MAJORVERSION).$(var.MINORVERSION).$(var.BUILDVERSION)"
DefaultLanguage="0"></File>
<RemoveFile Id='RemoveOldDLL' On='install' Name='foo.dll'/>
</Componente>
Это не чистый способ, но для удаления старой версии он мне подходит.