WiX:FileSource混乱

时间:2014-02-03 03:52:52

标签: wix

第一次尝试设置安装程序时,有点令人困惑。

此代码;

<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="ProgramFilesFolder">
        <Directory Id="FTSM" Name="FTSM">
            <Directory Id="INSTALLFOLDER" Name="FCP" FileSource="..\FCP\bin\Debug\">
                <Component Id="MainExecutable">
                    <File Id="FCPEXE" Name="FCP.exe" Source="FCP.exe" KeyPath="yes"/>
                    <Shortcut Id="startMenuFCP" Directory="ProgramMenuDir" Name="FCP" WorkingDirectory="INSTALLDIR" Icon="FCP.exe" IconIndex="0" Advertise="yes"/>
                </Component>
            </Directory>
        </Directory>
    </Directory>
</Directory>

不给我任何成功,我总是得到System cannot find the file 'FCP.exe'
如果我接受FileSource变量并将其放入源变量中,就像这样;

<File Id="FCPEXE" Name="FCP.exe" Source="..\FCP\bin\Debug\FCP.exe" KeyPath="yes"/>

然后一切都很完美。我可以毫无错误地构建WiX项目,并生成一个按预期工作的安装程序。

文件结构如下;

Main
-> FCP (Main Project)
--> bin
---> Debug
----> FCP.exe
-> Installer (WiX Project)
--> Product.wxs

对于这个项目来说显然不是一个大问题,但是当我遇到多个组件时,指定FileSource一次会更加方便。

2 个答案:

答案 0 :(得分:0)

所以,真的有点幸运,但事实证明,如果你使用WiX项目中的references文件夹,你可以在wxs文件中做一些简洁的引用。

我引用了我的项目,然后可以执行以下操作;

<File Id="FCPEXE" Name="FCP.exe" Source="$(var.FCP.TargetDir)\FCP.exe" KeyPath="yes"/>

答案 1 :(得分:0)

来自Bob Arnson的博客文章Choosing your payloads

  

当您使用File/@Name 属性并且不使用File/@Source时   属性,编译器构造一个基于文件的隐式路径   在文件的父组件目录上加上您提供的名称。

因此,当存在File/@Source时,无论是Directory/@FileSource,WiX都会使用它,如果不存在,那么通过组合Directory/@FileSourceFile/@Name来构建源路径。< / p>