第一次尝试设置安装程序时,有点令人困惑。
此代码;
<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一次会更加方便。
答案 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/@FileSource
和File/@Name
来构建源路径。< / p>