2009-10-13 24 views

回答

11

只需創建多個組件它引用相同的文件,但將其安裝到不同的位置。唯一的小問題,就是你不能同時採用兩種<File Source="somefile"/>元素引用相同的文件,因爲他們將得到同樣的自動生成的ID。顯式給文件元素不同的ID以避免這個問題。

<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我能做到這一點,但那是痛苦的,這意味着單獨的ID和GUID,等等等等 另一種選擇是的CopyFile似乎,但你必須處理它們的卸載 – 2009-10-13 20:33:14

+0

你也可以使用多個安裝程序,每個定義引用相同的組件目錄不同。但是,你最終會得到多個MSI文件。你想讓我詳細說明這種方法嗎? – 2009-10-13 23:09:10

+2

我會接受這個答案,因爲這是我最終有效地做的。我不喜歡所有的重複的想法,所以我最後寫的是生成的XML維克斯我和自動處理重複的程序。感覺像wix是太原始的,需要更高級別的抽象來編寫安裝程序。 – 2009-10-18 20:14:26

7

Windows Installer對於這個名爲「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

這是否刪除卸載副本? – 2009-10-14 13:28:42

+0

是的,它實際上 - 只要是做了重複被卸載(如果它是一組永久它可能不是)組成。 – 2009-10-14 14:44:06

相關問題