【问题标题】:heat generated files are not able to find SourceDir directory热生成的文件无法找到 SourceDir 目录
【发布时间】:2011-12-13 15:51:08
【问题描述】:

我正在运行 heat 来生成一个 wxs 文件。代码如下。

我想将 dir.prompts 中的所有文件添加到安装程序中的 wxs 文件中。我将其添加为自动构建过程的一部分(这样我就无法在生成 wxs 文件后对其进行修改)。

wxs 文件生成,如下所示。然而,Light 抱怨它找不到 SourceDir\Valid.wav 的位置。所以我想我的问题是,SourceDir 是我从中读取文件的目录,还是我不知道的某个魔法目录?非常感谢。

 <Fragment>
    <ComponentGroup Id="COMPONENTS">
        <Component Id="dmp120F8C2794******" Directory="dir31A7EE61C56025FE2564A81E28E8C132" Guid="{6D40EBC0-***-***-B972-**********}">
            <File Id="fil919100C2******D045EC131" KeyPath="yes" Source="SourceDir\Valid.wav" />
        </Component>



<exec program ="${dir.wix}\heat.exe">
  <arg value = "dir"/>
  <arg line = "${dir.prompts}"/> 
  <arg value= "-gg"/>
  <arg line="-cg &quot;COMPONENTS&quot;"/>
  <arg line = "-out  &quot;${dir.thisinstaller}\\COMPONENTS.wxs&quot;"/> 
</exec>

【问题讨论】:

    标签: wix heat


    【解决方案1】:

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

    例如

    light.exe -b Foo ...
    

    (答案来自:https://stackoverflow.com/a/6920979/640282

    【讨论】:

    • 我如何从 Visual Studio 项目中做到这一点?
    • 在 Visual Studio 中:项目属性 > 工具设置 > 链接器。键入 -b 路径。或者,将 LinkerBindInputPaths 元素添加到 .wixproj 文件中的 PropertyGroup。
    【解决方案2】:

    你应该在 heat 命令行中添加 -var 开关:

    来自 heat.exe 帮助:

    -var VariableName 替换 File/@Source="SourceDir"

    使用预处理器或 wix 变量。例如:

    -var var.MySource

    将变为 File/@Source="$(var.MySource)\myfile.txt"

    -var wix.MySource

    将变为 File/@Source="!(wix.MySource)\myfile.txt"

    【讨论】:

    • 但是我们需要添加一个“包含”标题,以便它能够识别变量。对吗?
    • 是的,但那是手工工作。如果可能的话,希望能回答如何自动完成。
    • 有没有什么方法可以在没有环境变量的情况下给出SourceDir的路径?
    • 您可以使用 Transform 通过 Heat 添加包含标头。 windows-installer-xml-wix-toolset.687559.n2.nabble.com/…
    猜你喜欢
    • 2013-07-19
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多