2017-01-20 6 views
0

У меня есть установщик WIX, которому необходимо установить файлы в два каталога. В одном каталоге нам нужно установить 32-битную версию файла, а в другом - 64-битную версию.установить несколько разных файлов с тем же именем в WIX?

Однако файлы имеют одинаковое имя файла, что, по-видимому, приводит к тому, что WIX объединяет их вместе и просто сохраняет одну копию в MSI.

В принципе, я хочу структуру директории, подобный следующему:

c:\Program Files\FooApp\MyLib.dll 
c:\Program Files (x86)\BarApp\MyLib.dll 

с соответствующими 32- и 64-разрядных версиях MyLib.dll.

Эти два файла находятся в нашем .wxs-файле в виде отдельных элементов файла с отдельными идентификаторами и хранятся в виде отдельных компонентов. Однако, когда я запускаю установщик, он устанавливает 64-разрядную версию файла в оба расположения, и если я извлечу содержимое MSI с помощью Dark.exe, он также покажет, что оба компонента имеют одинаковый атрибут Source.

Есть ли способ убедить WIX хранить оба файла самостоятельно и убедиться, что они установлены в нужном каталоге?

+0

Можете ли вы добавить компоненты, которые описывают оба этих файла, к вашему вопросу? –

+0

Идентификатор каждого элемента File просто должен быть уникальным (и, конечно же, источником :)) –

+0

Это не WiX, вам нужно убедить. Это установщик Windows. –

ответ

0

В то время как у WiX есть концепция под названием «умный кашинг», которая выполняется на основе контрольных сумм.

поведения вы видите из-за другую причину: Установщик

Windows, не поддерживает 32-битные и 64-битные компоненты в единой программе установки. Базы данных MSI являются специфичными для платформы, и установщик Windows будет работать против вас, «помогая» вам исправить эту ссылку C: \ Program Files, чтобы указать на 32-битное местоположение, которое, по его мнению, вы развертываете как 32-разрядный MSI.

«Правильное» решение состоит в том, чтобы создать 32-битный msi и 64-битный msi и объединить их вместе с помощью загрузочного устройства, такого как WiX Burn.

Если вам действительно не нужна сложность загрузочной машины EXE и только один файл для развертывания в 64-битной папке с программными файлами, есть подрывный хак. Я наблюдал в прошлые годы, что MSI недостаточно умен, чтобы понять, что C: \ Progra ~ 1 на самом деле C: \ Program Files, и поэтому он не будет вам помогать.

Этот небольшой подрывный взлом был полезен, когда мне нужно развернуть файл как в 32-битном, так и в 64-битном каталоге MSBuild.

Нет обещаний о том, будет ли он работать в будущем ... это не документировано Microsoft.

+0

Хмм, ты уверен? С WIX я могу построить 64-разрядный установщик и отметить отдельные компоненты как 32-разрядные, и это работает отлично. Проблема возникает только тогда, когда оба содержат файлы с одинаковыми именами. – jalf