2012-03-28 30 views
4

我需要我的應用程序的文件安裝到通常的位置像C:\Program Files\MyApp
還需要複製幾個人到自定義文件夾中的另一個分區
(比方說D:\CustomFolder,它允許硬編碼它)。WIX:將文件複製到定製目錄在另一個分區

安裝應該保持沉默 - 無需gui或嚮導。而且所有的東西都應該放在一個* .msi文件中。

我可以通過CustomActions來實現,但優雅的聲明方式更可取。

有沒有人試過這種?
謝謝。

UPDATE: 忘了提,這是允許的的文件,應該是在單獨的分區在C:\Program Files\MyApp

回答

4

已解決。其做法是:

  1. 指定其中的文件應放在自定義文件夾:

    <Property Id="MY_CUSTOM_DESTINATION" Value="D:\MyCustomFolder" />

  2. <Copy ..>指令到<File ...>應該被複制

<DirectoryRef Id="MyAppFolderThatIsInProgramFiles"> 
    <Component Id="MyComponent" Guid="some_guid"> 
     <File Id="MyFileXml" Source="MyFile.xml" KeyPath="yes" > 
      <CopyFile Id="Copy_MyFileXml" DestinationProperty="MY_CUSTOM_DESTINATION"/> 
     </File> 
    </Component> 
</DirectoryRef> 

p.s.作爲副作用,在<File Id="MyFileXml" ... />中指定的文件將被放置到位置:C:\Program Files\MyAppD:\MyCustomFolder,但這對我的任務是正確的。

+1

這不是一個副作用 - 這是它的工作原理和設計。當您在File元素下嵌套一個CopyFile時,這會生成DuplicateFile Windows Installer表的記錄。如果直接在組件元素下嵌套CopyFile,這意味着您不是安裝該文件,而是將外部文件複製到指定位置。我建議你瞭解底層的Windows安裝程序的概念更好的 - 作爲一個結果,你就會明白爲什麼WiXworks這樣:) – 2012-03-28 20:30:06

+1

刪除關閉標籤** ** DirectoryRef我 – Vojta 2018-01-02 10:55:55

0

您可以簡單介紹一下這個目錄標記下磁盤結構:

<Property Id="DRIVE_1" Value="c:\" /> 
<Property Id="DRIVE_2" Value="d:\" /> 
<Property Id="DRIVE_3" Value="e:\" /> 

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="DRIVE_1" /> 
    <Directory Id="DRIVE_2" /> 
    <Directory Id="DRIVE_3" /> 
</Directory> 

我不會主張硬編碼,但你明白了。

+0

這不起作用 - 'D:\'是無效的名稱,因爲'\'和':'是不允許的。 – 2012-03-28 09:47:05

+0

您是否對這些值進行硬編碼?如果這是你想要的,然後把它們放在屬性中。 – 2012-03-28 12:27:23

+0

我已經把值作爲一個屬性* .wxs文件''。如果我沒有弄錯,可以通過從命令行傳遞安裝程序參數來覆蓋'MY_CUSTOM_DESTINATION'值。 – 2012-03-28 12:43:35

1

這是針對硬編碼目錄的Windows Installer最佳實踐。你永遠不會認爲總會有一個D:甚至是C :.不過,客戶問(要求)我在D:\ FOO上安裝了一些東西。

那麼,如何讓客戶滿意,並且安裝仍然在那個沒有D:的VM上「工作」。如果D:是一個固定的硬盤,則在安裝時通過自定義操作重定向該目錄。

此外,雖然CopyFile元素很有用,但它並不是真的需要,因爲您可以將文件創建爲組件兩次,智能cabing將確保您的MSI不會因文件記錄指向同一條目而膨脹在媒體\駕駛室存儲。

+0

必須處理產品僅用於內部用途,以及現有的d' :\ MyCustomFolder'(這是衆多其他產品之間共享的衆所周知的位置)是一種先決條件。我明白硬編碼目錄通常不好,但在我的情況下,這不是問題。 – 2012-03-28 11:26:48

+1

對不起,你還沒有賣給我。你的團隊只是增加了技術債務,並將不良設計合理化。 – 2012-03-28 12:19:57

+0

是的,我意識到這一點。一旦有必要(這是可能的,但不太可能發生),我們很容易就能償還這筆債務。 – 2012-03-28 13:00:45

相關問題