dan*_*gph 63 windows-installer wix wix3
WiX文件似乎总是包含这一行:
<Directory Id="TARGETDIR" Name="SourceDir">
Run Code Online (Sandbox Code Playgroud)
什么是"SourceDir"?它是干什么用的?它不是真正的目录名称.这是一种神奇的价值吗?
Rob*_*ing 88
来自:http://robmensching.com/blog/posts/2010/1/26/StackOverflow-what-does-NameSourceDir-refer-to
老实说,这是我们应该从开发者那里隐藏的东西,但却没有.抱歉.问题的真相是,Windows Installer希望目录树始终植根在主键(Directory/@ Id)为"TARGETDIR"且DefaultDir列(Directory/@ Name)为"SourceDir"的目录行中. .
在安装过程中,TARGETDIR将默认为计算机上最大的驱动器.SourceDir将设置为MSI执行的位置.现在,SourceDir在初始安装后很棘手,因为除非调用ResolveSource操作,否则它不会被设置.但是,您不希望显式调用ResolveSource操作,因为它可能会提示您提供原始源媒体(请参阅:请插入CD).
我们在WiX工具集中应该做的是删除需要指定TARGETDIR/SourceDir对并说"没有父节点的任何目录元素将自动成为TARGETDIR的父级,因为这就是MSI SDK所说的." 相反,你必须自己做...而一些开发者想知道这一切意味着什么.
Wim*_*nen 21
从wix.chm文档中,主题"如何:向安装程序添加文件"主题:
Windows Installer需要具有id TARGETDIR的元素,它是安装的所有目录结构的根
根据MSDN文档TARGETDIR是
安装的根目标目录
另外根据MSDN,SourceDir是
包含源cabinet文件或安装包的源文件树的根目录
所以SourceDir属性指向一个真实的目录:MSI文件所在的目录.安装时,您可以在安装程序日志中看到此信息msiexec /lvx* installer.log installer.msi
.
但是,出于某种原因,在解析TARGETDIR时完全忽略了SourceDir.必须明确设置TARGETDIR(例如在命令行上),否则它将解析为ROOTDRIVE.如果未明确设置ROOTDRIVE,则它是具有最多可用空间的驱动器的根.
快速测试显示,将组件安装到TARGETDIR确实将文件放在我的D:\驱动器的根目录下,而不是MSI所在的文件夹.