Установите файл независимо от номера версии с WiX - PullRequest
9 голосов
/ 17 декабря 2009

MyApp версии 1.0 содержал файл 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 не помечен для установки» позже.

Ответы [ 4 ]

4 голосов
/ 17 декабря 2009

Это нелегко, потому что это противоречит стандартному поведению 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>

Это не чистый способ, но удалить старую версию мне подходит.

1 голос
/ 24 мая 2011

Я недавно ответил на похожий вопрос: Принудительное обновление файла, измененного во время первоначальной установки

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

0 голосов
/ 18 марта 2014

Примечание

Принудительно всегда перезаписывать в выводе Light.exe с помощью «трюка InstallShield»:

XPath = "/ wixOutput / table [@ name = 'File'] / row / field [5]" InnerText = „65535.0.0.0“

0 голосов
/ 25 мая 2011

Одна вещь, которую стоит попробовать - это установить RemoveExistingProducts очень рано в последовательности MSI должен сначала удалить старую программу, а затем установить обновление. Это решит вашу проблему. например,

<InstallExecuteSequence>
    <RemoveExistingProducts After="CostFinalize" />
</InstallExecuteSequence>
...