我正在使用最新的奉献(Wix v3.5)并创建了一个简单的Wix VS 2010安装项目。我添加了我的网站参考,并将Harvest
选项设置为true
。
现在,由于我的INSTALLDIR
指向IISROOT下的文件夹,我收到此light.exe错误:
[filepath]:错误LGHT0231:组件 'cmp93982C4086FF8C75F07339DD7CEA8152'有一个带路径的密钥文件 'TARGETDIR \ WEBDIR ... [文件名]的.xml'。由于此路径未植根 在其中一个标准目录(如ProgramFilesFolder)中,这个 组件不符合自动生成的标准 生成guid。 (如果路径包含a,也可能发生此错误 可能的标准目录,例如使用名称嵌套目录 ProgramFilesFolder下的“Common Files”。)
虽然我理解这个错误背后的原因,但我不一定同意它的理性(也许我不理解Wix MSI一代的固有工作方式)。
如何解决此错误?
提供一些背景信息:
我正在尝试与Team Build一起设置它。我可以使用旧格式并对文件夹运行Heat / Harvest任务来绕过此问题,但不想使用传统路由。
我没有使用基于工作流的新构建定义,因此不确定如何合并此自定义任务。
每次构建安装项目时我都需要运行收获,因为我不想手动跟踪数百个文件。
答案 0 :(得分:10)
问题是因为该组件植根于TARGETDIR,而WiX无法用于自动生成guid。您可以将Directory/@ComponentGuidGenerationSeed
添加到此组件上方的目录中以避免此问题。通过添加此属性,您现在必须负责确保组件不会在升级时安装到两个不同的目录。
在Windows Installer中,组件需要具有在修补程序,次要升级和主要升级之间不会更改的guid。为方便起见,WiX可以使用组件的目录层次结构作为种子为您生成version 5 UUID。但是,TARGETDIR
不符合此条件。
我认为原因是TARGETDIR
在各个安装中发生了变化(它被设置为具有最多可用空间的驱动器)。其中一个组件规则是“each component must be stored in a single folder”。如果主要升级之间发生TARGETDIR
更改,那么您最终可能会尝试将同一组件安装到第二个文件夹中。