13

我正在使用最新的还愿书(Wix v3.5)并创建了一个简单的 Wix VS 2010 安装项目。我添加了我的网站参考并将Harvest选项设置为true.

现在,由于我INSTALLDIR指向 IISROOT 下的文件夹,我得到了这个 light.exe 错误:

[文件路径]:错误 LGHT0231:组件“cmp93982C4086FF8C75F07339DD7CEA8152”有一个密钥文件,路径为“TARGETDIR\webdir...[文件名].xml”。由于此路径未植根于标准目录之一(如 ProgramFilesFolder),因此此组件不符合自动生成 guid 的标准。(如果路径包含可能的标准目录,例如在 ProgramFilesFolder 下嵌套名称为“Common Files”的目录,也可能会发生此错误。)

虽然我了解此错误背后的原因,但我不一定同意其合理性(也许我不了解 Wix MSI 生成的先天工作原理)。

如何解决此错误?


提供一些上下文:

我正在尝试与 Team Build 一起进行设置。我可以使用旧格式并针对文件夹运行 Heat/Harvest 任务以绕过此问题,但不想走旧路线。

我对新的基于工作流的构建定义玩得还不够,所以不确定如何合并这个自定义任务。

每次构建安装项目时我都需要运行收获,因为我不想手动跟踪数百个文件。

4

1 回答 1

12

问题是因为该组件植根于 TARGETDIR,WiX 不能使用它来自动生成 guid。您可以添加Directory/@ComponentGuidGenerationSeed到此组件上方的目录以避免该问题。通过添加此属性,您现在必须负责确保组件不会在升级过程中安装到两个不同的目录中。

在 Windows Installer 中,组件需要有一个不会在补丁、次要升级和主要升级之间更改的 guid。为方便起见,WiX 可以使用组件的目录层次结构作为种子为您生成版本 5 UUID 。但是,TARGETDIR没有资格这样做。

我相信原因是TARGETDIR安装之间的变化(它设置为具有最多可用空间的驱动器)。组件规则之一是“每个组件必须存储在单个文件夹中”。如果TARGETDIR在主要升级之间进行了更改,那么您最终可能会尝试将相同的组件安装到第二个文件夹中。

于 2013-09-10T08:27:50.040 回答