WiX 3.0抛出错误217,同时通过持续集成执行

Rin*_*lin 64 build-automation continuous-integration wix wix3

这是我们在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验证的同时解决此问题?

Rin*_*lin 48

故事结束:

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

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

    <PropertyGroup>
        <SuppressValidation>true</SuppressValidation>
    </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

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

  • 对于其他人认为这个答案是一个可行的解决方案,你应该明白,违反ICE会给你带来麻烦,试图坚持f.ex http://msdn.microsoft.com/en-us/library/windows/desktop/dd744769( v = vs.85).aspx以及生产现场正式检查.简而言之.不要通过禁用ICE检查来解决您的问题. (8认同)
  • 这不是一个真正的答案,而是一个不太好的解决方法. (7认同)
  • 也许这不是一个好的解决方法,但这是我发现生成我的MSI的唯一方法.谢谢Rinat! (4认同)
  • 既不搞乱环境也不给我的构建代理用户管理员权限对我有用。[WiX 工具集问题 3968](https://github.com/wixtoolset/issues/issues/3968/) 和 [Rob Mensching 在 WiX-Users 上的帖子](http://windows-installer-xml-wix- toolset.687559.n2.nabble.com/ICE-Validation-in-CI-systems-tp7599882p7599887.html)说唯一可靠的解决方法是禁用 ICE。像 [WiX 的 ICE Breakers 项目](https://github.com/wixtoolset/icebreaker) 之类的东西可能有一天会解决问题。 (2认同)

Cas*_*sen 31

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

  • 我同意这是一个不好的做法,而不是我个人喜欢做的事情,但它是两个邪恶中的较小者.完全禁用MSI的ICE验证,而不是使构建帐户成为管理员. (11认同)
  • 很高兴理解需要什么样的权限而不是给出完整的管理员角色...... (4认同)
  • 但这违反了 Team Build 最佳实践,请参阅:http://msdn.microsoft.com/en-us/library/dd578625 (2认同)
  • 在我的公司,不允许这样做。正如伊万在上面评论的那样,有人知道需要哪些确切的权限吗?(顺便说一句,我们暂时尝试了这个建议的解决方案,它奏效了) (2认同)

ima*_*agi 24

我找到了根本原因.我尝试了我发现的所有内容,包括类似于Re中发布的自定义验证程序扩展:[WiX-users] light.exe在运行ICE时随机失败..

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

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

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

问题很容易复制:

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

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

set > environment.txt
Run Code Online (Sandbox Code Playgroud)

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

  • 我认为你的意思是它是问题的原因之一,因为我的环境变量小于2K. (10认同)
  • 也为我工作:我正在使用带有base64编码证书的[`CSC_LINK`变量](https://www.electron.build/code-signing)的电子构建器,导致环境太大。为了解决这个问题,我将证书存储在一个文件中,并将“CSC_LINK”设置为证书文件名。 (2认同)

vla*_*135 9

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

来自Wix 3.5和Cruise Control的报价给出了错误LGHT0217:

ICE验证需要交互式帐户或管理员权限才能满意.请参阅WiX Projects vs. TFS 2010 Team Build(2009-11-14)或Re:[WiX-users]帮助构建补丁(2009-11-20).


Ogn*_*rov 5

imagi完全正确!我不敢相信这是真正的答案。取消验证并使TFS用户成为管理员不是一个好的解决方案。另外,我找不到NT \ Authority可以将其添加到Administrators组,并且完全陷于此。

我在Windows Server 2012数据中心上遇到与构建代理相同的错误。解决问题:

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

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