Поиск источника управляемых исключений, которые не приходят непосредственно из моего кода? - PullRequest
9 голосов
/ 05 сентября 2010

Я заранее прошу прощения, если это действительно вопрос Супер пользователя ... Я просто не был уверен, но это больше похоже на разработчика. сторона, чем на стороне техподдержки. :)

Это не обязательно проблема, но на самом деле это сводит меня с ума в моей системе. Это также происходит только на моем компьютере.

Когда я запускаю любое приложение, даже пустое приложение WPF, я вижу четыре исключения:

Первое случайное исключение типа «System.IO.DirectoryNotFoundException» произошло в PresentationCore.dll
Первое случайное исключение типа «System.ArgumentException» произошло в mscorlib.dll
Первое случайное исключение типа «System.ArgumentException» произошло в mscorlib.dll
Первое случайное исключение типа «System.InvalidOperationException» произошло в PresentationCore.dll

Чтобы выяснить, откуда они берутся, я затем установил VS2008 для прерывания любых сгенерированных исключений CLR, и вот информация:

Исключение № 1:
Не удается найти часть пути 'D: \ Dell \ Reader2.0 \ SPLASH.SYS \ fonts \ AscenderUni.ttf'.

Исключение № 2:
Название культуры 'ug' не поддерживается.
Имя параметра: имя

Исключение № 3:
Название культуры 'ug' не поддерживается.
Имя параметра: имя

Исключение № 4:
Зарегистрированные файлы CultureInfo с тегом IetfLanguageTag 'ug' отсутствуют.

Я прошился через Process Monitor и Process Explorer. Монитор процессов показывает, что мое приложение выполняет RegQueryValue, за который я, конечно, не отвечаю ... но некоторая DLL (предположительно от Dell Crapware) загружается моим процессом и читает этот ключ. Затем я посмотрел на Process Explorer, надеясь увидеть, какие DLL загружает мое приложение, но не могу найти эту информацию. Затем я попробовал PrcView и увидел модули, загружаемые моим приложением.

Я был удивлен, увидев, сколько других модулей загружалось, но я не увидел ничего, связанного с Dell. Мне также интересно, как это возможно, что DLL-библиотека Norton Internet Security была загружена в мой процесс, но я предполагаю, что это предназначено и что-то особенное, что Norton делает, чтобы гарантировать, что процесс безопасен для выполнения.

Что еще я могу сделать, чтобы определить и удалить, откуда происходят эти исключения?

UPDATE

Не уверен, что это сбивает с толку то, что я получаю здесь. Это исключение возникает в библиотеке DLL, которую мое приложение по какой-то причине загружает (я не упоминаю ничего, связанного с Dell из моего проекта) Я сейчас удалил это приложение, и я все еще получаю глупые исключения. Все это технически хорошо, потому что исключение обрабатывается где-то , предположительно в этой DLL, но я просто раздражен, потому что четыре дополнительных сообщения (фактически 8, так как мне приходится закрывать два диалога на исключение) всплывают, когда я запустите мое приложение. Назовите меня ленивым, но я никогда не просил эту чертову DLL загрузить в первую очередь. :)

Возможно, теперь пришло время использовать msconfig, чтобы начать отключение некоторых служб Dell. Я поиграю с этим позже, когда у меня будет свободное время.

Ответы [ 5 ]

17 голосов
/ 20 октября 2010

Нет повреждения файла.Пока я пытался выследить этого, я понял, что случилось.Где-то на этом пути был установлен шрифт с уйгурской культурой, которая, по-видимому, является турецко-китайской культурой (насколько я могу судить) и их тегом CultureInfo?«Мкг».Когда шрифты были кэшированы, система пыталась загрузить уйгурскую культуру.К сожалению, моя установка Windows, кажется, явно не хватает этой культуры в Windows.Зная, что в ближайшее время я не буду использовать эту культуру на своем компьютере, я следовал указаниям MSDN по созданию и установке новой культуры.

Хотя ошибка не повредит ничего серьезного.Это - просто исключение из первого шанса, в конце концов, это меня раздражало.Итак, вот что я сделал.

  1. Создайте новое консольное приложение.
  2. Добавить ссылку на sysglobal.
  3. Добавьте следующий код:

        var culture = new CultureAndRegionInfoBuilder("ug", CultureAndRegionModifiers.None);
        var ci = new CultureInfo("en-US");
        var ri = new RegionInfo("US");
        culture.LoadDataFromCultureInfo(ci);
        culture.LoadDataFromRegionInfo(ri);
        culture.Register();
    
  4. Build.

  5. В проводнике Windows (для этого необходимы права администратора), запустите скомпилированный исполняемый файл от имени администратора.

Если все идет хорошо, теперь в C: \ windows \ Globalization должен быть файл с именем "ug.nlp".

Вы больше не должны получать это сообщение.

2 голосов
/ 27 августа 2012

У меня была такая же проблема.Он исчез после того, как я сделал:

Очистить кэш шрифтов WPF и перезапустить Visual Studio.Очистить кеш: http://support.microsoft.com/kb/937135

Эрик

1 голос
/ 23 мая 2012

С помощью приведенных выше ответов я смог решить эту проблему, удалив шрифт "Microsoft Uighur Regular"

1 голос
/ 05 сентября 2010

Это очень вряд ли будет лопатой на вашей машине.Эти библиотеки DLL также должны внедряться в неуправляемые программы, они должны быть написаны на языке, который не зависит от CLR, например, C или C ++.И соответственно не может генерировать управляемые исключения.

Эти исключения выглядят для меня как проблемы с конфигурацией машины.Хлам в вашем реестре.Плохое название культуры (звучит как «мы» испорчено на «ug») генерирует три из них, шрифт, вероятно, указан в реестре, но отсутствует на диске.возможно, диагностируйте это, используя ProcMon и отладчик.Используйте флажок Отладка + Исключения, Брошенный, чтобы заставить отладчик остановиться на исключении первого шанса.При попадании переключитесь на ProcMon, ключ или файл реестра должны быть видны в самом конце трассы.

0 голосов
/ 05 сентября 2010

Исключения первого шанса являются нормальными - они отображаются всякий раз, когда выбрасывается исключение, независимо от того, было оно обработано или нет. Они существуют, поэтому вы можете зайти в свой код и выяснить, почему они выброшены.

Однако, если исключение было обработано, проблем нет, и выполнение возобновится.

Если исключение не было обработано, отладчик поймает второе случайное исключение, и выполнение будет остановлено.

Это нормально и не должно вызывать беспокойства. Вы всегда можете их скрыть - см. этот вопрос и ответы для более подробной информации.

Что касается фактических исключений - существует некоторый код (сторонний или ваш), который пытается получить доступ к ttf в указанном каталоге, это не может быть найдено, поэтому исключение (которое было обработано, поэтому проблема).

Другие исключения связаны с созданием несуществующего CultureInfo (ug) - возможно, это должно быть uk? Проверьте конфигурацию и код для этого.

Эти значения могут быть настроены в реестре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...