MSI安装成功,但没有安装服务,事件日志中的MSIEXEC错误



我有一个安装两个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:Windowssyswow64MsiExec.exe
     Faulting module path: C:WindowsInstallerMSIC9AE.tmp
     Report Id: c5ffdc35-5ccd-4b00-9d60-1a198848062e
     Faulting package full name: 
     Faulting package-relative application ID: 

再次使用详细记录安装。任何帮助都非常感谢。

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

看来,您正在使用安装程序类自定义操作来安装服务。在每种情况下,我都知道(Visual Studio设置除外(这是不必要的。Windows Installer具有内置的支持,用于安装服务,而无需运行任何代码。自定义操作(而不是标准内置功能(是错误的。更好的工具为ServiceInstall表和ServiceControl表提供了支持,这使您摆脱了运行代码和相关问题的需求。

该日志表明您正在运行32位MSIEXEC.EXE进程,以在64位系统上安装服务。我相信32位子系统在Windows Server上是可选的,但是目前尚不清楚这是否是问题,因为安装显然成功,尽管安装程序类失败通常会丢失错误并完全退回安装。您要默默地安装吗?另一个问题可能是(显然(32位定制操作没有32位净FW。或者存在一个净FW架构不匹配(您有一些净2代码试图在4.0运行时运行(。如果要信任该错误0xc0000005,则在自定义操作代码中会违反访问权限 - 自定义操作可以通过将代码从MSI二进制表中提取到随机名称.tmp文件,然后从msiexec.exe process进行调用。,因此,由于某种原因,自定义操作代码也许已经失去了对该安装程序文件夹的访问权限。还有一个C 垫片DLL加载一个框架来运行托管代码,因此在其中还有C 依赖性故障的空间

安装程序类自定义操作框架在失败时确实很难调试,因为有很多故障点,这就是为什么我指出安装程序类可能是错误的,而且不必要的。

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

最新更新