在WiX的文件,这是什么名称=“SourceDir”是指什么?(In WiX files, what

2019-09-02 03:20发布

维克斯的文件似乎总是有这样一行:

<Directory Id="TARGETDIR" Name="SourceDir">

什么是“SourceDir”? 它是干什么用的? 这是不是一个真正的目录名。 它是某种神奇的价值?

Answer 1:

来源: http://robmensching.com/blog/posts/2010/1/26/StackOverflow-what-does-NameSourceDir-refer-to

老实说,它的东西,我们应该从开发人员隐藏,但没有。 抱歉。 事情的真相是,Windows安装程序预计在目录树始终扎根于目录列在主键(目录/ @ ID)是“TARGETDIR”和DEFAULTDIR柱(目录/ @名称)为“SourceDir” 。

在安装期间,TARGETDIR将默认为机器上的最大的驱动器。 SourceDir将被设置到正在执行MSI的位置。 现在,SourceDir是棘手后的初始安装,因为它不会设置,除非ResolveSource动作被调用。 但是,你不想显式调用ResolveSource行动,因为它很可能会提示您提供原始源媒体(又名:插入光盘,请)。

我们应该在WiX的工具集所做的是删除需要指定TARGETDIR / SourceDir对,并说:“没有父目录的任何元素将被自动父到TARGETDIR,因为这是微星SDK说的事情。” 相反,你必须做你自己......以及一些开发者想知道这一切意味着什么。



Answer 2:

从wix.chm文档,主题“如何:添加文件到您的安装程序”:

id为TARGETDIR的元素是由Windows安装程序要求的是所有的目录结构的根为您的安装

根据MSDN文档TARGETDIR是

用于安装的根目标目录

此外,根据MSDN, SourceDir是

包含源CAB文件或安装包的源文件树的根目录

所以SourceDir属性指向一个真实的目录:一个在您的MSI文件坐镇。 与安装时,您可以在安装程序日志中看到这个msiexec /lvx* installer.log installer.msi

然而,出于某种原因SourceDir完全解决TARGETDIR时忽略。 该TARGETDIR必须是明确设置(例如,在命令行上),或者它解析为ROOTDRIVE。 如果没有明确设置ROOTDRIVE那么它是最自由空间的驱动器的根目录。

快速测试显示,安装到TARGETDIR组件确实会将文件在我的d根:\驱动器,其中MSI坐在文件夹代替。



Answer 3:

这一切都不是真的对我很有帮助。 我发现这个线程不知道如何做一个调试版本,在我的源文件(那些打算在安装程序)可以从任一“释放” build目录或“调试”拉建项目,我想提出的DIR一个安装程序。

一些grepping后,我发现在wixproj文件的实际路径,有SourceDir被定义为:

<SourceDir>$(SolutionDir)distribution\Release</SourceDir>

其中有真的无关,与安装文件和项目文件。 我可以添加其他的PropertyGroup是反映现在指了指我调试文件发放组:

<SourceDir>$(SolutionDir)distribution\Debug</SourceDir>

希望这可以帮助别人。 我知道这是一个有点偏离主题,但希望它可以帮助别人的未来。 不知道为什么这个项目的插件不公开这个价值? 还是我缺少什么?



文章来源: In WiX files, what does Name=“SourceDir” refer to?