在应用Microsoft更新后,MSMQ在MQOpenQueue上抛出异常
MSMQ throws exception on MQOpenQueue after Microsoft updates are applied
我们正在运行我们的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
我们的结论是程序实际上是由于不同的问题而崩溃的。我们使用微软的调试诊断工具来生成崩溃转储。对于同一个进程ID,我们有时会遇到两个崩溃转储。我们认为,这是由于在mqsec.dll中抛出异常时获得的第一个转储。后来的崩溃转储是由于真正的问题。我们猜测,第一个异常是在Microsoft的dll中捕获的,对_MQOpenQueue的调用最终返回了,可能是一个错误。但是,该异常生成了一个崩溃转储文件,其中包含上述堆栈跟踪信息。
我们将获取此站点崩溃转储的方法改为设置注册表项的值,如下所示:
https://msdn.microsoft.com/en-us/library/windows/desktop/bb787181 (v = vs.85) . aspx
这帮助我们专注于真正的崩溃,而不是被抛出和捕获的其他异常分散注意力。
相关文章:
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 从构造函数抛出异常时如何克服内存泄漏
- GCC对可能有效的代码抛出init list生存期警告
- 如何在文件和行号中抛出错误
- 为什么当为T2抛出bad_alloc异常时,此代码中会发生内存泄漏
- 抛出多个异常时,catch 块执行的顺序是什么,为什么?
- 在C++11中抛出异常时,是否使用移动语义
- OpenCV mat::在抛出异常时
- 当抛出异常时,我需要va_end吗
- 当构造函数抛出异常时,如何删除数据成员的内存
- 当构造函数抛出异常时,RAII是如何工作的
- 为什么在下面的例子中抛出异常时,pb指向的Shape被销毁
- 当方法抛出异常时,方法作用域的对象将被销毁
- 在调用返回结构的函数后抛出异常时,堆栈展开过程失败
- 当从构造函数抛出异常时,应用程序崩溃
- 当构造函数抛出异常时,Delete操作符出现分段错误
- 当抛出异常时,尝试用cout语句阻塞行为
- 当抛出意外异常时,为什么不中止这个程序?
- 在应用Microsoft更新后,MSMQ在MQOpenQueue上抛出异常