如何使用Visual Studio为WIX合并模块的内容设置特定的位置

问题描述:

我正在制作一个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的文件夹,并且还测试该位置是否事先存在。有什么建议么?

非常感谢!

使用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>