维克斯的文件似乎总是有这样一行:
<Directory Id="TARGETDIR" Name="SourceDir">
什么是“SourceDir”? 它是干什么用的? 这是不是一个真正的目录名。 它是某种神奇的价值?
维克斯的文件似乎总是有这样一行:
<Directory Id="TARGETDIR" Name="SourceDir">
什么是“SourceDir”? 它是干什么用的? 这是不是一个真正的目录名。 它是某种神奇的价值?
来源: 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说的事情。” 相反,你必须做你自己......以及一些开发者想知道这一切意味着什么。
从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坐在文件夹代替。
这一切都不是真的对我很有帮助。 我发现这个线程不知道如何做一个调试版本,在我的源文件(那些打算在安装程序)可以从任一“释放” build目录或“调试”拉建项目,我想提出的DIR一个安装程序。
一些grepping后,我发现在wixproj文件的实际路径,有SourceDir被定义为:
<SourceDir>$(SolutionDir)distribution\Release</SourceDir>
其中有真的无关,与安装文件和项目文件。 我可以添加其他的PropertyGroup是反映现在指了指我调试文件发放组:
<SourceDir>$(SolutionDir)distribution\Debug</SourceDir>
希望这可以帮助别人。 我知道这是一个有点偏离主题,但希望它可以帮助别人的未来。 不知道为什么这个项目的插件不公开这个价值? 还是我缺少什么?