维克斯3.0抛出错误217,而通过持续集成执行

这是在Windows 2008上运行ICE (从WiX 2.0迁移到WiX 3.0之后)自动生成套件引发的错误:

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

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

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

直观:

  • VBScript和JScript是在pipe理员下注册的。
  • 集成服务具有桌面交互和所有文件的权限
  • 当由另一个用户甚至是以集成账户(通过RDP )login的用户在同一台​​机器上手动执行时,构build成功,

到目前为止我还没有想法。

如何在保持ICEvalidation的同时解决这个问题?

故事结束

在没有任何运气的情况下,在集成帐户, DCOM ,服务激活等等的权限摆弄之后,我最终简单地在持续集成构build中禁用了ICEvalidation,同时仍然保留在本地构build中。

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

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

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

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

我find了根本原因。 我尝试了我发现的一切,包括自定义validation器扩展类似于Re:[WiX-users] light.exe运行ICE时随机失败。

这不是像在各个线程中所build议的那样是并发问题。 这是由过大的过程环境块(PEB)造成的。

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

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

问题可以很容易地转载:

  • 创build一个设置大小超过32 kB的环境variables的.bat文件。 例如,它可以是32行set Variable<number>=<text longer than 1024 characters>
  • 启动cmd.exe
  • 执行您创build的batch file
  • 从相同的cmd.exe窗口中:
    • 尝试使用带有ICEvalidation的WiX构buildMSI包
    • 运行smoke.exe来validation你的软件包
    • 只需运行msiexec /i Package.msi
  • 所有上述命令将最终报告Error 1719 - Windows Installer could not be accessed

所以,解决scheme是 – 审查你的构build脚本,减less环境variables的数量和大小,使他们都适合到32 kB。 您可以通过运行来轻松validation结果:

 set > environment.txt 

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

正确的描述(没有解决scheme,除了将CruiseControl帐户添加到本地pipe理员组中可以作为解决scheme通过):

Wix 3.5&Cruise Control的报价给出errorLGHT0217

ICEvalidation需要交互式帐户或pipe理员权限才能开心。 参见例如WiX项目与TFS 2010团队build设 (2009-11-14)或Re:[WiX-users]帮助build设补丁 (2009-11-20)。

imagi是完全正确的! 我不敢相信这是真正的答案。 禁止validation和使TFS用户pipe理员不是好的解决scheme。 另外,我无法findNT \ Authority将其添加到pipe理员组,并完全卡在这个。

Windows Server 2012 Datacenter作为Build Agent时出现同样的错误。 要解决这个问题:

  1. 项目清单
  2. 在生成代理机器上转到环境variables
  3. 创build两个系统variables
  4. "PF86"等于"C:\Program Files (x86)"
  5. "PF"等于"C:\Program Files"
  6. 他们是如此之短,因为我想保存字符。我做了他们没有最后的反斜杠,因为TEMP,TMP等是这样做的,我决定坚持MS标准这些variables。
  7. 编辑PATHvariables,用%PF86%replace每个"C:\Program Files (x86)" ,用%PF% %PF86%每个"C:\Program Files"
  8. closures并build立和享受!
  9. 它为我工作。 🙂

我得到相同的ICE错误,但问题转向被损坏的Windows Installer服务。 此解决scheme为我工作: http : //support.microsoft.com/kb/315353

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

此外,validationSYSTEM帐户具有Windowsregistry中的HKEY_CLASSES_ROOTconfiguration单元的完全控制访问权限。 在某些情况下,您可能还需要添加pipe理员帐户。

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

在WiX v3中,Light会自动运行validation – Windows Installer内部一致性评估程序(ICE) -每次成功构build之后。 validation是一种很好的方法来捕捉可能导致服务问题的常见编写错误,这就是为什么现在默认运行。 不幸的是,在Windows Vista和Windows Server 2008上发生的常见问题可能会导致ICE失败。 有关原因以及如何解决问题的详细信息,请参阅Heath Stewart的博客和Aaron Stebner的WebLog 。

我有一些build议。

  • 尝试更新生成服务器上的Microsoft安装程序版本
  • 确保你使用的是最新版本的WiX 3.0,因为它现在已经是3.0版本了。
  • 如果一切都失败了,请尝试在特定的构build用户下运行构build服务

我面临同样的问题,不喜欢压制ICEvalidation。 我的设置:我使用自己的计算机作为Visual Studio Online(VSO)上的构build代理。 我的解决scheme是更改用于在我的机器上运行服务的帐户。 我不用networking服务或本地服务,而只是用我自己的帐户login服务,这个帐户拥有所有必要的权利。

转到您的生成计算机并重新启动Windows Installer服务