我们正在运行我们的C ++程序(使用VS2008编译)作为服务并调用MQOpenQueue。 应用Microsoft更新后
KB3065979
KB3054205
KB3064209
KB3063858
KB3040272
KB3059317
KB3058515
到Windows Server 2008 r2 SP1企业计算机,对MQOpenQueue的所有调用都失败了。删除更新后,此问题仍然存在,直到重新安装MSMQ。然后它正常运作不到一天,然后偶尔再次发生。
抛出的异常是异常代码0xE06D7363。
这里是堆栈
(map #(* % %) (range))
答案 0 :(得分:1)
我们的结论是程序实际上由于不同的问题而崩溃。我们使用Microsoft的调试诊断工具来生成故障转储。我们有时会为同一个进程ID获得两个故障转储。我们认为,这是由于在mqsec.dll中抛出异常时获得的第一个转储。后来的崩溃转储是由于真正的问题。我们猜想第一个异常是在微软的dll中找到的,并且对_MQOpenQueue的调用终于返回了,可能是一个错误。但是,该异常生成了一个崩溃转储文件,其中包含上述堆栈跟踪。
我们将在此站点获取故障转储的方法切换为设置注册表项的值,如下所示:
https://msdn.microsoft.com/en-us/library/windows/desktop/bb787181(v=vs.85).aspx
这有助于我们专注于真正的崩溃,而不会被抛出和抓住的其他异常分散注意力。