Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 第一次机会异常:RPC服务器不可用_C#_Visual Studio_Exception_Rpc - Fatal编程技术网

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

C# 第一次机会异常:RPC服务器不可用,c#,visual-studio,exception,rpc,C#,Visual Studio,Exception,Rpc,在开发我的C#应用程序时,每当我创建OpenFileDialog时,VS输出窗格中就会出现以下内容: First-chance exception at 0x75A6C42D (KernelBase.dll) in (myapp).exe: 0x000006BA: The RPC server is unavailable. 我已经维护这个应用程序很多年了,而且肯定以前从未见过,所以我开始在SVN中回滚以确定它是何时开始的 令人困惑的是,它发生的修订和没有发生的修订似乎不一致;如果我回顾得足够

在开发我的C#应用程序时,每当我创建OpenFileDialog时,VS输出窗格中就会出现以下内容:

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不要破坏这些类型的异常,并忽略它们。但是,正如前面提到的,在使用这个软件多年之后,我从未见过它一次——所以我想确定它们是什么时候以及为什么开始的,而不是睁一只眼闭一只眼。

这与您的项目无关。使用shell对话框(如OpenFileDialog)时,将资源管理器加载到进程中。它有很多行李,你还可以装载所有的外壳扩展。自定义资源管理器的那种,它们在对话框中也能正常工作

行为不端的人很常见。程序员倾向于使用更古怪的类型。调试器告诉您,现在您可以看到此类shell扩展中的任何错误

因此,实际上没有出现任何问题,异常被捕获并处理。Explorer针对破坏它稳定的坏shell扩展实现了反措施,并自动禁用它们。所以你只是有一个跛脚鸭壳扩展不起作用,你会注意到的可能性很低,因为它可能已经有一段时间不起作用了


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

从您的测试来看,它似乎是“随机”的,因此错误可能不在您的代码中。由于RPC正在调用远程资源,请检查您的网络、RPC服务器活动等。例如,域身份验证可能会导致此情况。在所有网络连接关闭时会发生此情况。另外,奇怪的是,它似乎从来不会发生在足够旧的版本(即大约3700个修订版)上,而且总是发生在最新的修订版上。所以,虽然它似乎不在我的代码中……但对我来说,它的这种行为仍然是荒谬的。为什么我可以通过回滚修订来阻止它,而通过向前滚动来启动它-但它发生的精确修订并不是那么不可预测?尝试多次重建单个版本,结果总是一样的还是每个构建行为都不同?我只尝试了14次重建:r3982(当前版本)每次都这么做(连续7/7次),r3783(旧版)从未这么做过(0/7)。嗯,很好的洞察力。但是,(1)我不记得最近添加了任何远程的内容(我对我的系统上安装的内容非常好奇,以及(2)如果它与项目没有任何关系,那么回滚修订是否会对是否出现这种情况产生任何影响,这难道不是很奇怪吗?更改修订不会更改存在的浏览器扩展,因此我希望它总是出现,或者永远不会出现,而不管我调试的是哪个修订。否?还有,只要我看不出调用堆栈中有什么明显的可疑之处。似乎所有的MS dll:davclnt.dll不属于您的进程。嗯,没有那么容易摆脱。翻转忽略点…几个月前我在玩WebDAV。但是,我不明白为什么只有在运行某些修订时才会出现这种情况,而在运行其他修订时不会出现。我只尝试了14次一行:一行重建了r3982 7x,每次都显示异常;一行重建了r3783 7x,但从来没有显示过。根据最初的问题,一些修订是不一致的。像这样的异常似乎应该是一致的可复制的-如果它与我的代码无关,应该不会受到我的修订的影响我正在使用。在我的例子中,是过时的驱动器映射导致了问题。由于缓存了驱动器映射失败的结果,因此结果不一致。使用文件资源管理器从“这台电脑”中删除损坏的驱动器映射,错误将消失。