【问题标题】:MSMQ throws exception on MQOpenQueue after Microsoft updates are applied应用 Microsoft 更新后,MSMQ 在 MQOpenQueue 上引发异常
【发布时间】:2015-10-02 02:34:25
【问题描述】:

我们将 C++ 程序(用 VS2008 编译)作为服务运行并调用 MQOpenQueue。 应用 Microsoft 更新后

KB3065979
KB3054205
KB3064209
KB3063858
KB3040272
KB3059317
KB3058515

到 Windows server 2008 r2 SP1 企业机器,对 MQOpenQueue 的所有调用都失败了。此问题在删除更新后仍然存在,直到重新安装 MSMQ。然后它正常运行了不到一天,然后又开始偶尔发生。

抛出的异常是异常代码 0xE06D7363。

这是堆栈

KERNELBASE.dll!_RaiseException@16 ()    Unknown

msvcrt.dll!__CxxThrowException@8 () Unknown

mqsec.dll!ThrowMissingValue(class RegEntry const &,long)    Unknown

mqsec.dll!registry_access_error::`scalar deleting destructor'(unsigned int) Unknown
mqsec.dll!CmQueryValue(class RegEntry const &,unsigned char * *,unsigned long *)    Unknown
mqsec.dll!MQSec_GetWorldSid(void)   Unknown
mqsec.dll!MQSec_GetLocalMachineSid(int,unsigned long *) Unknown
mqrt.dll!RTpGetThreadUserSid(int *,int *,unsigned char * *,unsigned long *) Unknown
mqrt.dll!RTSecurityContextBase::InitializeUserInfo(void)    Unknown
mqrt.dll!InternalSecurityContext::CreateSecurityContext(void)   Unknown
mqrt.dll!RtpOpenQueue(wchar_t const *,unsigned long,unsigned long,unsigned long *)  Unknown
mqrt.dll!_MQOpenQueue@16 () Unknown

【问题讨论】:

标签: c++ msmq


【解决方案1】:

我们的结论是程序实际上是由于另一个问题而崩溃。我们使用 Microsoft 的调试诊断工具来生成故障转储。我们有时会为同一个进程 ID 获得两个故障转储。我们认为,这是由于在 mqsec.dll 中抛出异常时获得了第一个转储。后来的崩溃转储是由于真正的问题。我们推测第一个异常是在 Microsoft 的 dll 中的某个地方捕获的,并且对 _MQOpenQueue 的调用最终确实返回了,可能有一个错误。但是,该异常生成了一个包含上述堆栈跟踪的故障转储文件。

我们将在此站点上获取故障转储的方法切换为设置注册表项的值,如下所述:

https://msdn.microsoft.com/en-us/library/windows/desktop/bb787181(v=vs.85).aspx

这有助于我们专注于真正的崩溃,而不会被抛出和捕获的其他异常分心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 2022-11-12
    • 2018-04-14
    • 2012-01-13
    • 1970-01-01
    相关资源
    最近更新 更多