维克斯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时出现同样的错误。 要解决这个问题:
- 项目清单
- 在生成代理机器上转到环境variables
- 创build两个系统variables
-
"PF86"
等于"C:\Program Files (x86)"
-
"PF"
等于"C:\Program Files"
- 他们是如此之短,因为我想保存字符。我做了他们没有最后的反斜杠,因为TEMP,TMP等是这样做的,我决定坚持MS标准这些variables。
- 编辑PATHvariables,用
%PF86%
replace每个"C:\Program Files (x86)"
,用%PF%
%PF86%
每个"C:\Program Files"
- closures并build立和享受!
- 它为我工作。 🙂
我得到相同的ICE错误,但问题转向被损坏的Windows Installer服务。 此解决scheme为我工作: http : //support.microsoft.com/kb/315353
- 以pipe理员身份login到您的计算机。
- 单击开始,然后单击运行。
- 在打开框中,键入cmd,然后单击确定。
- 在命令提示符处,键入msiexec.exe / unregister,然后按Enter。
- 键入msiexec / regserver,然后按Enter。
- 重新启动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服务