繁体   English   中英

优先机会异常:RPC服务器不可用

[英]First-chance exception: The RPC server is unavailable

在开发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不要破坏这些类型的异常,而忽略它们。 但是如前所述,在使用该软件多年之后,我从未见过它-因此,我想确切确定它们启动的时间原因 ,而不是视而不见。

这与您的项目无关。 当使用诸如OpenFileDialog之类的外壳对话框时,会将Explorer加载到您的进程中。 这带来了很多负担,您可以加载所有的Shell扩展。 自定义资源管理器的类型,它们在对话框中的效果也一样。

行为不端的情况很常见。 程序员倾向于使用更奇怪的类型。 调试器会告诉您有关此类shell扩展的任何意外信息。

因此,实际上没有任何错误,可以捕获并处理异常。 资源管理器实施了针对措施,以防止不良的外壳扩展破坏其稳定性并自动禁用它们。 因此,您只有一个me脚的鸭壳扩展程序不起作用,由于它可能有一段时间没有起作用,您注意到的几率很低。

调试器可以告诉您哪一个不好。 启用非托管调试,然后在“调试+异常”对话框中选中“抛出”复选框。 现在,当引发异常时,调试器将停止。 您不会看到任何源代码,但是可以在“调用堆栈”调试器窗口中找到提示。 它在Windows DLL函数下方的堆栈中某处显示包含错误代码的DLL名称。 这个名字应该给你一个提示,那就是麻烦制造者。 SysInternals的AutoRuns实用程序非常适合禁用它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM