Wix Heat 输出没有像我想要的那样引用目录

Posted

技术标签:

【中文标题】Wix Heat 输出没有像我想要的那样引用目录【英文标题】:Wix Heat output not referencing directory like I want 【发布时间】: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>

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

【问题讨论】:

【参考方案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 并查看输出 - 您会找到足够的信息和示例。

【讨论】:

以上是关于Wix Heat 输出没有像我想要的那样引用目录的主要内容,如果未能解决你的问题,请参考以下文章

Wix、Heat 和 Wxi 文件

如何包含由 Heat 创建的 Wix Fragments

无法删除其他安装程序安装的文件

使用Wix将整个目录添加到MSI数据库的规范方法是什么?

wix heat 使用 xsl 文件移除命名空间

Wix 资源收集工具“Heat”。如何获取具有动态名称的文件,例如构建时生成的 Microsoft 运行时文件