моя программа .net вызывает BSOD - PullRequest
7 голосов
/ 12 июля 2010

Я получаю синий экран при запуске приложения Windows Winform.Кажется, что только один пользователь получает это.Я не уверен, где в это время искать проблему.Однако я использую некоторый код, который я нашел в CodeProject, для перехвата событий мыши и клавиатуры http://www.codeproject.com/KB/cs/globalhook.aspx Может ли это быть?

Я ищу предложения о том, как я могу перехватить эту ошибку.Это происходит только на одном пользовательском компьютере из 40, поэтому я немного озадачен - тем более, что этот пользователь является основным заинтересованным лицом.

Обновление: у нас есть еще один инцидент - общий знаменатель - это док-порт.Пользователь использовал тот же док-порт.

Ответы [ 3 ]

12 голосов
/ 12 июля 2010

Ваш код не может быть , вызывая BSOD. Если вы не работаете в режиме ядра, то BSOD не ваша ошибка (если вы извините за каламбур).

OTOH, я видел, как управляемый код вызывает ошибку в куске кода режима ядра. Эта ошибка затем вызвала BSOD. В моем случае код режима ядра был частью программного обеспечения VPN, которое хотело понять, какой код вы выполняете, чтобы решить, разрешить ли вам доступ к VPN. В коде для этого использовались хуки режима ядра, и у них была ошибка, которая была вызвана загрузкой большого количества сборок.

По-видимому, они никогда не тестировали свой код во время работы Visual Studio. Он загружает надстройки и тому подобное во время выполнения, что вызывает их ошибку. Часть кода C #, которая просто загружала большое количество сборок в домен приложений (затем выгружала домен приложений и запускалась заново), также вызывала их ошибку, поэтому это не было проблемой Visual Studio.

Мораль этой истории в том, что кто-то должен посмотреть на аварийный дамп и выяснить, какая часть программного обеспечения режима ядра вызвала сбой, тогда, возможно, вы сможете выяснить, что происходило в системе, чтобы вызвать ядро. Режим программного обеспечения для сбоя.

3 голосов
/ 12 июля 2010

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

  1. Плохая память.Если возникла ошибка памяти, нет ничего необычного в том, чтобы увидеть конкретную программу, которая может «вызвать» доступ к плохой памяти и привести к BSOD.Например, если он обычно запускает довольно легкие приложения, возможно, ошибка памяти находится в месте, которое обычно не используется.Когда вы загружаете свое приложение, особенно если оно занимает много памяти и вызывает много зависимостей, вы вполне можете вызвать сбой косвенно.Поэтому выполните полную проверку оперативной памяти устройства.

  2. Драйверы принтера.Раньше это было больше проблемой, чем сейчас, но если вы работаете на XP, то она все равно иногда появляется.Известно, что драйверы принтеров плохо написаны и часто глючат.Это не случайно, что приложение вызывает драйвер принтера, который, в свою очередь, приводит к сбою системы.Чтобы проверить это, просто удалите драйверы принтера, а затем перезагрузите их снова.

РЕДАКТИРОВАТЬ: Как указано в комментариях, любое плохое оборудование или плохие драйверы могут вызвать такого рода поведение.Я просто выделяю драйверы памяти и принтера, потому что опыт показывает, что эти два, безусловно, являются наиболее распространенными причинами, которые стоит рассмотреть в первую очередь.

1 голос
/ 13 июля 2010

Я должен был решить эту проблему раньше.Я писал код пользовательского режима C # для общения с устройством HID на шине USB.Эта проблема возникла на моем ноутбуке, но на чужой машине.Оказалось, что это вызывало проблемы, потому что я работал на 64-битной ОС и, следовательно, имел 64-битные драйверы.У всех остальных пользователей были 32-битные драйверы, с которыми не было проблем.Это был мягко контролируемый набор пользователей.Я знал каждого пользователя, и они были компетентными пользователями, которые могли дать мне информацию об их оборудовании, ОС и драйверах.Мы также все использовали одно и то же устройство.

Я не помню, как я ОПРЕДЕЛЯЛ проблему.Но я решил это довольно просто, настроив проект приложения только для 32-битной Windows.Без 64-битного приложения неисправный драйвер никогда не используется.

Попросите пользователей обновить свои драйверы, оборудование или изменить код, чтобы вообще не использовать драйвер.

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