【问题标题】:Windows Installer Crashes with 0xC0000409 error but doesn't display anythingWindows 安装程序崩溃并出现 0xC0000409 错误,但不显示任何内容
【发布时间】:2021-11-12 14:26:25
【问题描述】:

我正在使用 64 位 Windows 10 系统上的 64 位 Windows 安装程序,该系统存在间歇性崩溃问题,它会崩溃并关闭而不显示任何类型的错误消息。单击安装程序的 UI 时会发生这种情况,它实际上并没有尝试安装任何东西。收集故障转储,我看到它将异常列为“未知错误”0xC000409。当我通过 Visual Studio 的调试器运行故障转储以获取信息时,消息说:

Unhandled exception at 0x00007FFCA685C56F (ntdll.dll) in msiexec__PID__9356__Date__11_01_2021__Time_01_46_34PM__594__Second_Chance_Exception_C0000409.dmp: RangeChecks instrumentation code detected an out of range array access.

从故障转储中收集的堆栈跟踪如下:

ntdll!LdrpICallHandler+f
ntdll!RtlpExecuteHandlerForException+f  
ntdll!RtlDispatchException+244    
ntdll!KiUserExceptionDispatch+2e
ntdll!LdrpDispatchUserCallTarget+e  
msi!CMsiRecord::Release+12e
msihnd!CMsiHandler::CreateControls+18e    
msihnd!CMsiHandler::CreateNewDialog+6ba   
msihnd!CMsiHandler::RunWizard+564     
msihnd!CMsiHandler::DoAction+6e6  
msi!MsiUIMessageContext::ProcessMessage+1816      
msi!MsiUIMessageContext::RunInstall+1ed   
msi!RunEngine+1c9  
msi!MsiInstallProductW+11f
msiexec!DoInstallPackage+20e      
msiexec!ServerMain+1009 
msiexec!WinMain+36
msiexec!__mainCRTStartup+1a0      
kernel32!BaseThreadInitThunk+14
ntdll!RtlUserThreadStart+21

据我所知,最近安装程序没有发生重大变化。突然开始有人报告说安装程序崩溃了,这是我迄今为止能够编译的信息。我的问题是,是否有任何方法可以在运行时对安装程序进行故障排除,以便我可以深入了解这一点,或者是否有任何潜在的修复我可以探索应用?我已经对这个错误进行了很多谷歌搜索,但我还没有找到相关的结果。

我还尝试使用 ProcMon 查看文件是否被阻止但尚未找到任何内容。我试图将调试器附加到安装程序以产生运行时故障,但由于它似乎正在进入 Microsoft 代码,我无法查看源代码或它正在使用的信息。

我试图收集 Windows Installer 日志,但日志在崩溃时被截断,没有显示任何有用的异常信息。据我所知,当安装程序尝试创建对话框时会发生崩溃。

【问题讨论】:

  • 尝试查看 Windows 事件查看器是否包含有关失败的更多信息。该行为是否在干净的机器上仍然存在?也许你的开发机器上的某些东西在密集的测试/开发过程中被损坏了。
  • 从你写的我想你已经在许多机器上测试过这个崩溃问题并且你在不同的机器上看到了这个问题?
  • 是的,我已经在多台机器上看到了崩溃。我从事件查看器中看到的只是错误代码,并没有告诉我太多信息。
  • 这个问题有进展吗?
  • 添加!日志记录选项对于确保您获得所有内容非常重要。您是使用标准 MSI UI 还是有自己的内部 ui 处理程序?任何自定义操作?

标签: exception memory crash runtime-error windows-installer


【解决方案1】:

更新:一些问题:

  • 1)您在设置 GUI 中有任何自定义操作吗?

  • 2)这是来自 WiX 的 GUI 集还是您自己的自定义 GUI?

  • 3) 这些机器不是 Windows 11 吗?

  • 4) 您是在非常干净的虚拟机上安装吗?堆栈跟踪中的以下条目让我想知道是否在适当版本的盒子上安装了 Visual C/C++ 运行时?:

    msiexec!__mainCRTStartup+1a0
    

这似乎是指“C 运行时库 (CRT)”。请检查是否安装:Microsoft Visual C++ Redistributable Latest Supported Downloads.


Logging

带有额外调试信息的详细日志记录(非常慢)-Comprehensive answer on logging:

msiexec.exe /i C:\Path\Your.msi /L*vx! C:\Your.log

快速参数说明:

/i = run install sequence 
/L*vx! C:\Your.log = verbose debug logging at specified path

x 添加额外的调试信息,! 禁用日志缓冲区。 这意味着如果发生任何崩溃,日志不会丢失。


Silent Installation

我想知道崩溃是否仅来自设置 GUI。如果是这种情况,您可能能够成功地静默安装设置(因为这完全绕过了 GUI)。请试试这个?如果这也失败了,也许是缺少 Visual C/C++ 运行时?或者可能是别的东西。如上所述,日志记录是必不可少的。

msiexec.exe /i c:\setup.msi /QN /L*V "C:\Temp\msilog.log"

快速参数说明:

/L*V "C:\Temp\msilog.log"= verbose logging
/QN = run completely silently
/i = run install sequence 

您也可以在此处输入连续记录的感叹号(无日志缓冲区),但这会大大降低安装速度。


链接:

【讨论】:

  • 回答问题: 1) 有自定义操作正在运行,但到目前为止我从日志中看到的表明它们正在成功。 2)我认为除了安装程序中的前两个对话框之外,它都是自定义 UI。 3) 它们是 Windows 10 机器。我们甚至需要一段时间才能考虑升级到其他任何东西。 4) 我使用这个虚拟机已经有一段时间了,所以我不确定它有多干净。此问题也会出现在具有不同先决条件的客户计算机上。
  • 默认情况下,安装程序还会安装多个版本的 C++ 可再发行组件。与我一起工作的大多数人都是这样做的,以至于我的虚拟机安装了一堆。
  • 我尝试通过在日志参数中添加感叹号来进行调试。当我最终让安装程序崩溃时,它在尝试加载 CustomizeDlg 时崩溃了,我认为这是一个标准的 WiX 对话框。
  • 当您通过 Orca 在 MSI 上运行验证时(工具 => 验证... => 开始) - 您会收到哪些错误和警告? WiX GUI 标记中可能存在一些错误。附带说明:也许try the shell extension shown at the bottom here 可以帮助您以管理员权限运行设置。你的 WiX 资源在 github 上吗?
  • 我的资源不在 Github 上。我认为我无法发布源代码,因为我很确定它是专有的。
猜你喜欢
  • 2011-07-25
  • 1970-01-01
  • 2022-01-21
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
  • 2019-06-04
  • 2013-10-26
  • 1970-01-01
相关资源
最近更新 更多