【问题标题】:How to set a specific location for the content of a WIX merge module using Visual Studio如何使用 Visual Studio 为 WIX 合并模块的内容设置特定位置
【发布时间】:2017-04-07 15:26:50
【问题描述】:

我正在制作一个 msi,它将 2 个插件安装到用户的 Roaming 文件夹和一个文件夹(+ 其内容)到机器上的特定位置:C:\UMI\temp。对于 2 个插件,一切都很好。我有问题的文件夹。首先,我需要测试该位置是否存在,然后将内容移动到该位置。

按照我的设置方式,我使用 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 的文件夹,并且还预先测试该位置是否存在。有什么建议吗?

非常感谢!

【问题讨论】:

    标签: visual-studio wix windows-installer merge-module


    【解决方案1】:

    使用DirectorySearch 检查文件夹是否存在:

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

    您想安装到硬编码路径似乎有点奇怪,但我们假设您有充分的理由。

    仅当该目录存在时,才使用该目录搜索在组件条件中分配的属性来安装文件。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多