在WiX文件中,Name ="SourceDir"是指什么?

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所说的." 相反,你必须自己做...而一些开发者想知道这一切意味着什么.

  • 也许每个文件有 1 行而不是 6 行。Heat 输出文件充满了 SourceDir,不知道为什么它在那里。让我们使用 xml 使简单的文件复制过程变得过于复杂。 (2认同)

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所在的文件夹.

  • 啊! Wix的奥秘!发现所有惊喜,不一致和秘密握手是一次真正的冒险. (11认同)
  • 谢谢(你的)信息.我仍然很困惑.我的理解是Name属性应该是真实目录的名称,而"SourceDir"则不是.如果你把它关掉,编译器就会抱怨"你必须要将Name设置为SourceDir". (2认同)