【问题标题】:Harvesting files leads to LGHT0231 error收割文件导致 LGHT0231 错误
【发布时间】:2011-09-07 04:05:45
【问题描述】:

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

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

[文件路径]:错误 LGHT0231:组件 'cmp93982C4086FF8C75F07339DD7CEA8152' 有一个带有路径的密钥文件 'TARGETDIR\webdir...[文件名].xml'。由于此路径未植根 在标准目录之一(如 ProgramFilesFolder)中,此 组件不符合自动生成的标准 生成的向导。 (如果路径包含 可能是标准目录,例如嵌套带有名称的目录 ProgramFilesFolder 下的“通用文件”。)

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

我该如何解决这个错误?


提供一些上下文:

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

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

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

【问题讨论】:

  • 我也有同样的问题;我正在尝试将 C:\Inetpub\wwwroot\MyProject\ 设置为默认安装位置,但 WiX 不会听到它。
  • 您找到解决方法了吗?谢谢
  • @SanjaMelnichuk:不幸的是没有。当我转移到其他项目时,我也没有在那里投入更多时间,但我想我在那里尝试做的事情需要一些 XAML 知识和熟悉 TFS 工作流。
  • @Mrchief 最后我找到了解决方法。感谢回复
  • 如果有人遇到同样的问题,可以使用 Directory/@ComponentGuidGenerationSeed 属性来解决。你可以在这里找到它的文档wix.sourceforge.net/manual-wix3/wix_xsd_directory.htm。顺便说一句,我使用的是 Wix v3.6,我不确定它是否适用于旧版本。

标签: wix wix3.5 votive


【解决方案1】:

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

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

我相信原因是TARGETDIR 会随着安装而改变(它被设置为具有最多可用空间的驱动器)。组件规则之一是“each component must be stored in a single folder”。如果TARGETDIR 在主要升级之间发生了变化,那么您最终可能会尝试将相同的组件安装到第二个文件夹中。

【讨论】:

  • 直到我在创作另一个 Wix 项目时才再次遇到这个问题,然后我才想起了你的解决方案。对不起,我花了这么长时间才接受它! :)
  • 我不明白。如果您生成的 GUID 已经存在于用户计算机上怎么办?
  • @johnktejik 那会很糟糕,但意外产生 GUID 冲突的几率是如此之大,以至于可能不值得担心。
猜你喜欢
  • 2011-09-04
  • 2017-07-10
  • 2015-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多