WiX 文件似乎总是包含这一行:
<Directory Id="TARGETDIR" Name="SourceDir">
什么是“源目录”?这有什么用途?这不是一个真正的目录名称。这是某种神奇的价值吗?
WiX 文件似乎总是包含这一行:
<Directory Id="TARGETDIR" Name="SourceDir">
什么是“源目录”?这有什么用途?这不是一个真正的目录名称。这是某种神奇的价值吗?
来自:http ://robmensching.com/blog/posts/2010/1/26/StackOverflow-what-does-NameSourceDir-refer-to
老实说,这是我们应该对开发人员隐藏的东西,但没有。对不起。事情的真相是,Windows 安装程序希望目录树始终植根于目录行,其中主键 (Directory/@Id) 是“TARGETDIR”,DefaultDir 列 (Directory/@Name) 是“SourceDir” .
在安装过程中,TARGETDIR 将默认为机器上最大的驱动器。SourceDir将设置为执行 MSI 的位置。现在,SourceDir 在初始安装后很棘手,因为除非调用 ResolveSource 操作,否则不会设置它。但是,您不想显式调用 ResolveSource 操作,因为它可能会提示您提供原始源媒体(又名:请插入 CD)。
我们在 WiX 工具集中应该做的是消除指定 TARGETDIR/SourceDir 对的需要,并说“任何没有父级的目录元素都将自动成为 TARGETDIR 的父级,因为这是 MSI SDK 所说的。” 相反,你必须自己做......有些开发者想知道这一切意味着什么。
从 wix.chm 文档中,主题“如何:将文件添加到您的安装程序”:
id 为 TARGETDIR 的元素是 Windows 安装程序所必需的,它是您安装的所有目录结构的根
根据 MSDN 文档TARGETDIR是
安装的根目标目录
同样根据 MSDN,SourceDir是
包含源cabinet文件或安装包的源文件树的根目录
因此 SourceDir 属性指向一个真实的目录:您的 MSI 文件所在的目录。安装时,您可以在安装程序日志中看到这一点msiexec /lvx* installer.log installer.msi
。
但是,由于某种原因,在解析 TARGETDIR 时会完全忽略 SourceDir。TARGETDIR 必须要么明确设置(例如在命令行上),要么解析为 ROOTDRIVE。如果 ROOTDRIVE 未明确设置,则它是具有最多可用空间的驱动器的根目录。
快速测试表明,将组件安装到 TARGETDIR 确实会将文件放在我的 D:\ 驱动器的根目录,而不是 MSI 所在的文件夹。
这些都对我没有帮助。我发现这个线程想知道如何进行调试构建,我的源文件(安装程序中的源文件)可以从我正在尝试制作的项目的“发布”构建目录或“调试”构建目录中提取安装程序。
经过一番grepping,我在wixproj文件中找到了实际路径,SourceDir定义为:
<SourceDir>$(SolutionDir)distribution\Release</SourceDir>
这实际上与安装文件和项目文件无关。我能够添加另一个 PropertyGroup,它反映了现在指向我的调试文件的发布组:
<SourceDir>$(SolutionDir)distribution\Debug</SourceDir>
希望这可以帮助某人。我知道这有点离题,但希望它对未来的人有所帮助。不知道为什么项目插件不公开这个值?还是我错过了?