MSI安装成功但未安装服务,事件日志中的MsiExec错误

时间:2018-04-24 14:47:57

标签: web-services windows-installer windows-server

我有一个安装两个Windows服务的msi安装程序。在Windows Server 2016 64位计算机上安装期间没有错误,安装成功但未安装服务。我能够使用installutil手动安装服务,但没有关于msi无法安装服务的原因的线索。到目前为止,安装程序已在数百个安装中工作。我能够从机器上获取事件日志,并且我能够在应用程序日志中找到的唯一错误是那种:

     Faulting application name: MsiExec.exe, version: 5.0.14393.0, time 
     stamp: 0x57899002
     Faulting module name: MSIC9AE.tmp, version: 4.0.30319.33440, time 
     stamp: 0x52004298
     Exception code: 0xc0000005
     Fault offset: 0x000064ff
     Faulting process id: 0x2244
     Faulting application start time: 0x01d3db09c12691f2
     Faulting application path: C:\Windows\syswow64\MsiExec.exe
     Faulting module path: C:\Windows\Installer\MSIC9AE.tmp
     Report Id: c5ffdc35-5ccd-4b00-9d60-1a198848062e
     Faulting package full name: 
     Faulting package-relative application ID: 

使用详细日志记录再次安装不是一个选项。 非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

关于如何安装服务或者使用什么工具来生成MSI并安装这些服务的信息不多,但我可以从该日志中做出一些猜测:

您似乎正在使用安装程序类自定义操作来安装服务。在每种情况下我都知道(除了Visual Studio设置)这是不必要的。 Windows Installer内置了对安装服务的支持,无需运行任何代码。自定义操作(而不是标准的内置功能)容易出错。更好的工具为ServiceInstall tableServiceControl table提供了支持,使您无需运行代码和相关问题。

该日志显示您正在运行32位msiexec.exe进程以在64位系统上安装服务。我相信32位子系统在Windows Server上是可选的,但目前尚不清楚这是否是一个问题,因为安装显然成功,尽管安装程序类失败通常会引发错误并完全回滚安装。你在安静地安装吗?另一个问题可能是没有32位NET FW来运行(显然)32位自定义操作。或者有一个NET FW架构不匹配(你有一些NET 2代码试图在4.0运行时运行)。如果要信任该错误0xC0000005,那么您在自定义操作代码中有访问冲突 - 自定义操作通过从MSI二进制表中提取代码到随机名称.tmp文件然后从msiexec.exe进程调用它来工作,因此,由于某种原因,自定义操作代码可能无法访问该\ installer文件夹。还有一个C ++ shim Dll加载一个框架来运行托管代码,因此那里也存在C ++依赖失败的空间

安装程序类自定义操作框架在失败时很难调试,因为存在大量故障点,这就是为什么我指出安装程序类可能容易出错并且不必要。

Windows需要针对不同体系结构的不同设置,因此对于64位安装,如果问题与跨体系结构相关,则值得确保为64位显式构建所有自定义操作代码。