В какой-то момент при разработке моего приложения С#, когда я создавал 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, чтобы не нарушать эти типы исключений и игнорировать их. Но, как уже упоминалось, после многих лет работы над этим программным обеспечением я никогда не видел его один раз, поэтому я хотел бы точно определить, когда и почему они начали, а не просто закрывать глаза.
Это не имеет никакого отношения к вашему проекту. Когда вы используете диалоговые окна оболочки, например OpenFileDialog, вы загружаете Explorer в свой процесс. Который поставляется с большим количеством багажа, вы также загружаете все загружаемые оболочки. Вид, который настраивает Explorer, они работают так же хорошо в диалоговом окне.
Ошибочные вещи довольно распространены. Программисты склонны использовать тип quirkier. Любая ошибка в таком расширении оболочки теперь видна вам, отладчик сообщает вам об этом.
Таким образом, ничто не пошло не так, исключение было поймано и обработано. Explorer выполняет контрмеры против неправильных расширений оболочки, дестабилизируя их и автоматически отключает их. Таким образом, у вас просто есть расширение оболочки лайма-утки, которое не работает, низкие коэффициенты, которые вы заметили бы, поскольку он, вероятно, не работал некоторое время.
Отладчик может сказать вам, какой из них плох. Включите неуправляемую отладку и отметьте флажки "Бросок" в диалоговом окне "Отладка + исключение". Отладчик теперь остановится, когда будет выбрано исключение. Вы не увидите никакого исходного кода, но вы можете посмотреть окно отладки Call Stack для подсказок. Он отображает имя DLL, которое содержит плохой код где-то в стеке, под функциями Windows DLL. Имя должно дать вам намек, который является нарушителем спокойствия. Утилита SysInternals 'AutoRuns отлично подходит для их отключения.