2017-04-06 58 views
0

我正在製作一個msi,它將2個插件安裝到用戶的Roaming文件夾和一個文件夾(+它的內容)到機器上的特定位置:C:\UMI\temp。對於2個插件,一切都很好。這是與我有一個問題的文件夾。首先,我需要測試該位置是否存在,然後將內容移至該位置。如何使用Visual Studio爲WIX合併模塊的內容設置特定的位置

我有它的方式安裝,我使用Heat.exe收穫合併模塊內的文件夾的內容。合併模塊然後在我的WIX項目文件中引用。

這是有問題的合併模塊的內容:

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Module Id="TempFilesMM" Language="1033" Version="1.0.0.0"> 
     <Package Id="9f5b21ce-db22-40aa-a2f6-f82ed89958a5" Manufacturer="Some Company" InstallerVersion="200" InstallScope="perMachine"/> 

     <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="MergeRedirectFolder"> 
     <Directory Id="INSTALLLOCATION" Name="HarvestSetup"> 
      <Directory Id="TempFilesComponentGroup"> 
      </Directory> 
      </Directory> 

     </Directory> 
     </Directory> 
    <ComponentGroupRef Id ="TempFilesComponentGroup"/> 
    </Module> 
</Wix> 

知道TempFilesComponentGroup是參照收穫.wxs文件,我想INSTALLLOCATION是其中的內容是安裝過程中複製的目錄。事實上,在安裝時,它會在C:\目錄的根目錄下創建一個名爲HarvestSetup的文件夾。我想要它安裝在C:\UMI\temp沒有名爲HarvestSetup的文件夾,並且還測試該位置是否事先存在。有什麼建議麼?

非常感謝!

回答

0

使用DirectorySearch檢查,如果該文件夾存在:

<Property Id="EXISTING_INSTALLLOCATION"> 
    <DirectorySearch Id="Search_EXISTING_INSTALLLOCATION" Path="C:\UMI\temp"/> 
</Property> 

要安裝到一個硬編碼路徑似乎有點怪,但是讓我們假設你有一個很好的理由。

只有在該目錄存在的情況下,才使用組件條件中由DirectorySearch分配的屬性來安裝文件。

<Component Id="SomeComponentId" Guid="SomeGUID" Directory="EXISTING_INSTALLLOCATION"> 
    <File Id="SomeFileId" Source="SomeSource"/> 
    <Condition>EXISTING_INSTALLLOCATION</Condition> 
</Component>