73

这是我们在 Windows 2008 上的自动构建套件在运行ICE时抛出的错误(从WiX 2.0 迁移到 WiX 3.0 之后):

LGHT0217:执行 ICE 操作“ICE01”时出错。这种 ICE 故障的最常见原因是错误注册的脚本引擎。有关详细信息以及如何解决此问题,请参阅http://wix.sourceforge.net/faq.html#Error217 。外部 UI 消息记录器不希望出现以下字符串格式:“无法访问 Windows Installer 服务。如果未正确安装 Windows Installer,可能会发生这种情况。请联系您的支持人员寻求帮助。”。在 light.exe(0, 0) 中

此外,这些是事件日志中显示的错误:

MSIInstaller:无法连接到服务器。错误:0x80070005 产品:[ProductName] -- 错误 1719。无法访问 Windows Installer 服务。如果未正确安装 Windows Installer,则可能会发生这种情况。请联系您的支持人员寻求帮助。

直观地说:

  • VBScriptJScript在 admin 下注册。
  • 集成服务具有桌面交互和所有文件的权限
  • 构建成功,当另一个用户或什至以集成帐户登录的用户(通过RDP)在同一台机器上手动执行时

到目前为止我没有想法。

如何在保持 ICE 验证的同时解决此问题?

4

12 回答 12

51

故事结尾

在摆弄集成帐户、DCOM、服务激活等权限后,没有任何运气,我终于在持续集成构建中简单地禁用了 ICE 验证,同时仍将其保留在本地构建中。

要禁用 ICE 验证,您可以在 .wixproj 文件中将 SuppressValidation 设置为 true:

    <PropertyGroup>
        <SuppressValidation>true</SuppressValidation>
    </PropertyGroup>

或者将-sval命令行选项传递给light.exe.

于 2009-09-05T12:55:26.313 回答
32

将 TFS 构建控制器帐户添加到本地管理员组并重新启动 Windows 服务为我完成了这项工作。

于 2011-09-01T22:16:01.650 回答
28

我找到了根本原因。我尝试了我找到的所有东西,包括类似于Re: [WiX-users] light.exe 在运行 ICE 时随机失败的自定义验证器扩展。.

这不是各种线程中建议的并发问题。它是由过大的进程环境块 (PEB) 引起的。

事实证明,Windows Installer 无法处理大于 32 kB 的进程环境块。在我的环境中,由于构建系统设置的变量数量及其大小(例如,包含多个重复值的PATH 变量),PEB 约为 34 kB。

有趣的是,根据环境变量,Windows XP 和 2003 将 PEB 的硬限制设置为 32 KB。这可能会在构建的早期阶段导致易于捕获的构建中断。较新的 Windows 没有这样的限制,但我猜 Windows Installer 开发人员将其内部环境缓冲区限制为 32 kB,并在超过该值时优雅地失败。

问题很容易重现:

  • 创建一个 .bat 文件,用于设置大小超过 32 kB 的环境变量。例如可以是 32 行set Variable<number>=<text longer than 1024 characters>
  • 启动 cmd.exe
  • 执行您创建的批处理文件
  • 从同一个 cmd.exe 窗口:
    • 尝试使用 WiX 构建 MSI 包并在 OR 上进行 ICE 验证
    • 运行smoke.exe以验证您的包裹或
    • 只需运行msiexec /i Package.msi
  • 以上所有命令最终都会报告Error 1719 - Windows Installer could not be accessed

因此,解决方案是 - 检查您的构建脚本并减少环境变量的数量和大小,使它们都适合 32 kB。您可以通过运行轻松验证结果:

set > environment.txt

目标是使文件 environment.txt小于~30 kB。

于 2012-03-15T15:12:16.017 回答
10

问题的正确描述(没有解决方案,除非将 CruiseControl 帐户添加到本地管理员组可以作为解决方案传递):

来自Wix 3.5 & Cruise Control 的引用给出了错误LGHT0217

ICE 验证需要一个交互式帐户或管理员权限才能满意。例如,参见WiX Projects vs. TFS 2010 Team Build (2009-11-14) 或Re: [WiX-users] Help with building patch (2009-11-20)。

于 2012-11-28T13:06:09.537 回答
5

想像是完全正确的!我不敢相信这是真正的答案。禁止验证并使 TFS 用户成为管理员不是好的解决方案。另外,我找不到 NT\Authority 将其添加到管理员组,并且完全陷入了困境。

我在 Windows Server 2012 Datacenter 上遇到了与 Build Agent 相同的错误。解决问题:

  1. 项目清单
  2. 转到构建代理机器上的环境变量
  3. 创建两个系统变量
  4. "PF86"这等于"C:\Program Files (x86)"
  5. "PF"这等于"C:\Program Files"
  6. 它们很短,因为我想保存字符。我在没有最后的反斜杠的情况下制作它们,因为 TEMP、TMP 和其他都是这样制作的,我决定对这些变量坚持 MS 标准。
  7. 通过替换 every "C:\Program Files (x86)"with%PF86%和 every "C:\Program Files"with来编辑 PATH 变量%PF%
  8. 关闭并构建并享受!
  9. 它对我有用。:)

更新 我找到了一个更好的解决方案:Rapid Environment Editor将为您完成所有这些工作,甚至更多。自动地。

于 2013-01-17T16:08:22.197 回答
3

来自http://wix.sourceforge.net/faq.html#Error217

在 WiX v3 中,Light 会在 每次成功构建后自动运行验证——Windows Installer 内部一致性评估器 (ICE) 。验证是捕获可能导致服务问题的常见创作错误的好方法,这就是它现在默认运行的原因。不幸的是,Windows Vista 和 Windows Server 2008 上发生了一个常见问题,可能导致 ICE 失败。有关原因和解决方法的详细信息,请参阅 Heath Stewart 的博客Aaron Stebner 的 WebLog

于 2010-06-03T22:13:22.213 回答
2

我遇到了同样的 ICE 错误,但问题变成了 Windows Installer 服务损坏。这个解决方案对我有用:http: //support.microsoft.com/kb/315353

  1. 以管理员身份登录您的计算机。
  2. 单击开始,然后单击运行。
  3. 在“打开”框中,键入 cmd,然后单击“确定”。
  4. 在命令提示符处,键入 msiexec.exe /unregister,然后按 Enter。
  5. 键入 msiexec /regserver,然后按 Enter。
  6. 重新启动 Windows

此外,验证 SYSTEM 帐户是否具有对 Windows 注册表中 HKEY_CLASSES_ROOT 配置单元的完全控制访问权限。在某些情况下,您可能还必须添加管理员帐户。

于 2015-01-13T10:54:43.523 回答
2

我遇到了同样的问题,不喜欢压制 ICE 验证。我的设置:我使用自己的计算机作为 Visual Studio Online (VSO) 上的构建代理。我的解决方案是更改用于在我的机器上运行服务的帐户。我没有使用网络服务或本地服务,而是使用我自己的帐户登录服务,该帐户拥有所有必要的权限。

于 2015-10-14T06:52:18.020 回答
1

我有一些建议。

  • 尝试更新构建服务器上的 Microsoft Installer 版本
  • 确保您使用最新版本的 WiX 3.0,因为它现在是稳定的 3.0 版本。
  • 如果所有其他方法都失败了,请尝试在特定的构建用户下运行构建服务,您可以为该用户设置权限...
于 2009-07-07T17:44:11.010 回答
0

转到您的构建机器并重新启动 Windows Installer 服务

于 2016-09-21T09:30:17.413 回答
0

上述建议都没有对我有用,对我来说,防病毒软件 (mcafee) 出现在图片中,看起来它将 vbscript.dll 注册表项更新到了错误的 DLL 位置。这些是要记住的事情:

  1. 一些 WiX ICE 验证是使用 VBSCRIPT 实现的。
  2. 因此,在编译 MSI 时,构建服务器需要访问 c:\windows\system32\vbscript.dll。
  3. 运行您的构建的用户可能会以某种方式失去对该 DLL 的访问权限。
  4. 如上述答案中所述,请查找管理员访问权限/注册表访问权限并确保您的用户拥有它。

以下是我为解决此问题而采取的步骤:

  1. 在构建代理机器上打开 cmd(以管理员身份运行)。
  2. 运行注册编辑
  3. 选择根目录,然后单击 ctrl + f 并搜索以下注册表项:{B54F3741-5B07-11cf-A4B0-00AA004A55E8}
  4. 查找 InprocServer32\Default 键

在此处输入图像描述

  1. 在我的构建代理上,路径被替换为 mcafee DLL 位置。我将路径更新回 c:\windows\system32\vbscript.dll
  2. 编辑注册表项并不容易,因为它是一个受保护的注册表项。在编辑属性之前,我使用以下链接更改了访问权限:编辑受保护的注册表项

一旦我更新了路径,一切都开始照常工作。

于 2018-07-17T15:50:36.547 回答
0

我的解决方案类似于弗拉基米尔的解决方案。我的 CI 用户是计算机的管理员。

但是为了让我的詹金斯构建成功,以下步骤是强制性的:

  • 使用 rdp 以 CI 用户身份登录
  • 打开dos命令提示符
  • 执行:%windir%\system32\msiexec.exe /unregister
  • 执行:%windir%\system32\msiexec.exe /regserver

然后我得到了一份成功的工作

于 2020-09-30T20:38:25.220 回答