Исключение из первого шанса: сервер RPC недоступен

1

В какой-то момент при разработке моего приложения С#, когда я создавал 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, чтобы не нарушать эти типы исключений и игнорировать их. Но, как уже упоминалось, после многих лет работы над этим программным обеспечением я никогда не видел его один раз, поэтому я хотел бы точно определить, когда и почему они начали, а не просто закрывать глаза.

  • 0
    Из вашего теста это кажется «случайным», так что, вероятно, ошибка не в вашем коде. Поскольку RPC вызывает удаленный ресурс, проверьте свою сеть, активность сервера RPC и т. Д. Например, это может быть вызвано аутентификацией домена.
  • 0
    Это происходит при отключении всех сетевых подключений. Кроме того, странно то, что это НИКОГДА не происходит с достаточно старыми сборками (т.е. ревизиями около 3700 или около того), и это ВСЕГДА происходит на самых текущих ревизиях. Так что, хотя кажется, что это не в моем коде ... мне все равно кажется бессмысленным, что он будет вести себя так. Почему я смог остановить это, откатив ревизии, и начать, откатив вперед, но точные ревизии, при которых это происходит, и не такие непредсказуемые?
Показать ещё 2 комментария
Теги:
visual-studio
exception
rpc

1 ответ

4

Это не имеет никакого отношения к вашему проекту. Когда вы используете диалоговые окна оболочки, например OpenFileDialog, вы загружаете Explorer в свой процесс. Который поставляется с большим количеством багажа, вы также загружаете все загружаемые оболочки. Вид, который настраивает Explorer, они работают так же хорошо в диалоговом окне.

Ошибочные вещи довольно распространены. Программисты склонны использовать тип quirkier. Любая ошибка в таком расширении оболочки теперь видна вам, отладчик сообщает вам об этом.

Таким образом, ничто не пошло не так, исключение было поймано и обработано. Explorer выполняет контрмеры против неправильных расширений оболочки, дестабилизируя их и автоматически отключает их. Таким образом, у вас просто есть расширение оболочки лайма-утки, которое не работает, низкие коэффициенты, которые вы заметили бы, поскольку он, вероятно, не работал некоторое время.

Отладчик может сказать вам, какой из них плох. Включите неуправляемую отладку и отметьте флажки "Бросок" в диалоговом окне "Отладка + исключение". Отладчик теперь остановится, когда будет выбрано исключение. Вы не увидите никакого исходного кода, но вы можете посмотреть окно отладки Call Stack для подсказок. Он отображает имя DLL, которое содержит плохой код где-то в стеке, под функциями Windows DLL. Имя должно дать вам намек, который является нарушителем спокойствия. Утилита SysInternals 'AutoRuns отлично подходит для их отключения.

  • 0
    Хм, хорошее понимание. Тем не менее, (1) я не помню, чтобы что-то даже недавно добавляло (я довольно анальный по поводу того, что устанавливается в моей системе, и (2) если это не имеет никакого отношения к проекту, не так ли Кажется очень странным, что откат ревизий будет иметь какое-либо влияние на то, будет ли это появляться? Изменение ревизий не изменит того, какие расширения проводника присутствуют, поэтому я ожидаю, что оно всегда будет появляться или никогда - независимо от того, какая ревизия у меня отладка. Нет?
  • 0
    Кроме того, насколько я могу судить, ничто не выглядит явно подозрительно в стеке вызовов. Кажется, все MS DLL: screencast.com/t/VI1jPAQY0aH
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню