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