应用Microsoft更新后,MSMQ在MQOpenQueue上抛出异常

时间:2015-07-13 17:42:23

标签: c++ msmq

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

  

KB3065979
  KB3054205
  KB3064209
  KB3063858
  KB3040272
  KB3059317
  KB3058515

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

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

这里是堆栈

(map #(* % %) (range))

1 个答案:

答案 0 :(得分:1)

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

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

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

这有助于我们专注于真正的崩溃,而不会被抛出和抓住的其他异常分散注意力。