【问题标题】:Wix Heat output not referencing directory like I wantWix Heat 输出没有像我想要的那样引用目录
【发布时间】:2011-08-02 16:46:56
【问题描述】:

所以这是基本设置。我有一个现有的 WIX 项目,它将一堆单独的片段构建到一个更大的 MSI 中。我正在尝试更改项目以允许您选择要安装的单个部件。我运行的程序是,当我在较小的目录上运行 heat 以创建单个组件时,源路径不正确。我将举一个例子,希望这会更有意义。

所以我有这样的基本文件夹结构:

C:\ProjDir\Foo\Bar1
C:\ProjDir\Foo\Bar2

我曾经使用一个命令来简单地获取 C:\Foo (Heat.exe dir Foo -dr FOO_DIR_REF -out File.wxs),现在我将其更改为获取每个单独的 Bar 文件夹 (Heat.exe dir Foo\Bar1 -dr BAR1_DIR_REF -out File1.wxs)和(Heat.exe dir Foo\Bar2 -dr BAR2_DIR_REF -out File2.wxs)。我遇到的问题是收获的输出如下所示:

<Component Id="cmpblablabla" Guid="{stuff-here}">
    <File Id="filblabla" KeyPath="yes" Source="SourceDir\Bar1\file.here" />
</Component>

在尝试构建 msi 时它会抱怨,因为它找不到 SourceDir\Bar1。基本上我需要的是一种让它看起来像这样的方法:

<Component Id="cmpblablabla" Guid="{stuff-here}">
    <File Id="filblabla" KeyPath="yes" Source="SourceDir\Foo\Bar1\file.here" />
</Component>

这似乎是一个非常简单的问题,我确信这很容易解决,但我所做的所有搜索都没有找到任何有用的东西。

【问题讨论】:

    标签: wix windows-installer


    【解决方案1】:

    请注意,如果您使用 -b 将它们添加到搜索路径中,SourceDir 将搜索您的文件的其他 SourceDir

    例如

    light.exe -b Foo ...
    

    【讨论】:

    • 这正是我所需要的。非常感谢。很高兴知道您也可以指定多个 -b。
    【解决方案2】:

    应该是

    <Component Id="cmpblablabla" Guid="{stuff-here}">
        <File Id="filblabla" KeyPath="yes" Source="$(var.ProjectName.TargetPath)\Bar1\file.here" />
    </Component>
    

    不同的可用属性是

    • $(var.ProjectName.TargetPath)
    • $(var.ProjectName.ProjectDir)

    【讨论】:

    • 你知道如何使用热量来做到这一点吗?我知道 -var var.ProjectName.TargetPath 会让我获得第一部分,但我需要的是 Bar1,我还没有找到通过热量来做到这一点的方法。我知道我可以手动编辑文件,但我试图以自动方式进行。
    【解决方案3】:

    您的问题的答案都在 heat.exe 帮助文本中。 :-)

    为了获得正确的目录收获,请将热量指向您的根目录 (Foo),并在命令行中指定 -srd 开关。正如帮助文本所述,这将省略 root dir 收获,您很可能最终会得到您需要的东西。

    为了获得更大的灵活性,您可以指定 -var 开关以提供 WiX 变量,以替换 SourceDir 显式语句。同样,只需运行 heat.exe 并查看输出 - 您会找到足够的信息和示例。

    【讨论】:

      猜你喜欢
      • 2014-06-03
      • 2019-07-08
      • 2019-05-17
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      • 2016-02-04
      • 2011-10-12
      • 1970-01-01
      相关资源
      最近更新 更多