2009-10-13 4 views
10

Я пытаюсь сделать установку, которая ставит копию тех же файлов в нескольких местах ...Как скопировать набор файлов в несколько мест с помощью Wix?

Есть ли простой способ сделать это?

например. если бы я хотел поставить a.txt b.txt c.txt во все следующие директории: -...

\ Бла \
\ Txts \
\ Примеры \

ответ

11

Просто создать несколько компонентов которые ссылаются на один и тот же файл, но устанавливают его в разных местах. Единственная проблема заключается в том, что вы не можете использовать два элемента <File Source="somefile"/>, ссылающиеся на один и тот же файл, потому что они получат одинаковый автогенерированный идентификатор. Явно дайте идентификаторам файлов разные идентификаторы, чтобы избежать этой проблемы.

<DirectoryRef Id="directory1"> 
    <Component Id="somefile-component1"> 
     <File Id="somefile-id1" Source="/path/to/somefile"/> 
    </Component> 
</DirectoryRef> 

<DirectoryRef Id="directory2"> 
    <Component Id="somefile-component2"> 
     <File Id="somefile-id2" Source="/path/to/somefile"/> 
    </Component> 
</DirectoryRef> 
+0

да, я kindda полагал, что я мог бы сделать это, но это болезненно, это означает отдельные идентификаторы и идентификаторы GUID и т. д. Другой вариант - это CopyFile, похоже, но тогда вам придется обрабатывать их удаление. –

+0

. Вы также можете использовать те же компоненты в нескольких установщиках, которые каждый определяет ссылочный каталог по-разному. Но тогда вы получите несколько файлов MSI. Вы хотите, чтобы я подробно остановился на этом подходе? –

+2

Я согласен с этим ответом, так как это было тем, что я делал эффективно. Мне не нравится идея всего дублирования, поэтому я закончил писать программу, которая создала Wix xml для меня и автоматически обрабатывала дублирование. Похоже, что wix слишком сырой, и для написания установщиков требуется более высокий уровень абстракции. –

7

Установщик Windows имеет свою концепцию для этого, называемую «DuplicateFiles». Он работает только в том случае, если файлы на самом деле идентичны, но похоже, что это то, что вы хотите. В WIX вы это реализовать с помощью элемента CopyFile:

http://wix.sourceforge.net/manual-wix2/wix_xsd_copyfile.htm

Я на самом деле не пробовал, но это должно выглядеть примерно так

<Component Id='Manual' Guid='*' > 
    <File Id='Manual' Name='Manual.pdf' Source='Manual.pdf' KeyPath='yes'> 
    <CopyFile Id='MyDuplicateFile1' DestinationProperty ='DesktopFolder'/> 
    </File> 
</Component> 
+2

Удаляет ли это копию при удалении? –

+0

Да, это действительно так - до тех пор, пока компонент, который сделал дублирование, удаляется (может быть, нет, если он был установлен постоянным). –