第一次机会异常:RPC服务器不可用

时间:2015-01-10 08:52:06

标签: c# visual-studio exception rpc

在开发我的C#应用​​程序的某个时候,每当我创建一个OpenFileDialog时,以下内容就开始出现在VS Output窗格中:

First-chance exception at 0x75A6C42D (KernelBase.dll) in (myapp).exe: 0x000006BA: The RPC server is unavailable.

我多年来一直在维护这个应用程序,而且之前从未见过这个,所以我开始回到SVN来确定它何时开始。

令人费解的是,它发生的修订&不会发生似乎不一致;如果我回到足够远的地方它永远不会发生,但是当我可以检查修订时有一个“区域”,它不会发生,我会检查另一个版本,它会,然后我会回到第一个,这个时间突然之间。换句话说,我似乎无法可靠地确定它何时开始发生。

为了说明这一点,这里是我的测试的摘录,为了清晰起见缩进。数字是修订版。对于每个测试,我“更新到修订版”并进行完全重建。

      3977: Exception. This is the most-recent revision.
 3839: OK.  Since it didn't happen, I'll start working my way back up to see when it starts
   3843: OK
    3852: OK
     3890: Exception. So it started between 3852 & 3890.
    3852: Exception. Huh?? I JUST tried 3852, and last time it didn't happen!
3778: OK. Going back this far, I've never seen it happen.
    3852: Exception. I guess I'll start working my way BACK to see when it stops.
   3828: Exception
  3810: OK
   3828: Exception.  Just making sure.
  3810: OK. Just making sure again.
   3828: OK.  What?? 3828 showed the exception last time I tried!
    3852: OK. (but previously it showed the exception)
     3890: Exception

我知道我可以告诉VS不要打破这些类型的异常,并忽略它们。但正如前面提到的,经过多年研究这个软件,我从来没有见过它 - 所以我想确定何时为什么他们开始,而不是只是视而不见。

1 个答案:

答案 0 :(得分:4)

这与您的项目无关。当您使用shell对话框(如OpenFileDialog)时,可以将Explorer加载到您的进程中。这带来了很多包袱,你加载了所有的shell扩展。自定义资源管理器的类型,它们在对话框中也可以正常工作。

行为不端的人很常见。程序员倾向于使用奇怪的类型。现在可以看到这种shell扩展中的任何不幸事件,调试器会告诉您它。

所以,实际上没有出错,这个例外被捕获并处理了。资源管理器实现针对坏shell扩展的反措施,使其不稳定并自动禁用它们。所以你只有一个不起作用的跛鸭子外壳延伸,你注意到的几率很低,因为它可能已经有一段时间不起作用了。

调试器可以告诉你哪一个坏。启用非托管调试并勾选Debug + Exception对话框中的Thrown复选框。调试器现在将在抛出异常时停止。您将看不到任何源代码,但您可以查看调用堆栈调试器窗口以获取提示。它在Windows DLL函数下面显示包含堆栈某处的错误代码的DLL的名称。这个名字应该给你一个提示,哪一个是麻烦制造者。 SysInternals的AutoRuns实用程序非常适合禁用它们。