Как поймать нераскрытое исключение?Windows 7 - PullRequest
0 голосов
/ 25 июля 2011

моя программа работает в Windows XP, но вылетает без каких-либо исключений в Windows 7. Try catch не работает.Я также попробовал application.unhandledexception без удачи.Затем я попытался проверить в администрировании Windows и получил следующий журнал:

Level   Date and Time   Source  Event ID    Task Category

Error   7/25/2011 11:25:14 AM   Application Error   1000    (100)   "Faulting application name: myApp.exe, version: 1.0.0.0, time stamp: 0x4e2ce191

Faulting module name: ntdll.dll, version: 6.1.7601.17514, time stamp: 0x4ce7b96e

Exception code: 0xc0000005

Fault offset: 0x00052ca9

Faulting process id: 0x%9

Faulting application start time: 0x%10

Faulting application path: %11

Faulting module path: %12

Report Id: %13"

Я не уверен, какую часть кода показать, так как он имеет большие классы коллекций, но я вернусь к редактированию этогоpost.

Я тоже пытался выгружать файлы из диспетчера задач, но я не уверен, как их использовать.

Могу ли я использовать какие-либо конкретные инструменты?Я использую VS2008.Я заглянул в NLog, но не уверен, что с ним делать, поэтому пропустил.

Есть предложения?советы и хитрости?

Ответы [ 3 ]

3 голосов
/ 25 июля 2011

Попробуйте ThreadExceptionEventHandler и посмотрите.

 Application.ThreadException += new ThreadExceptionEventHandler(MyCommonExceptionHandlingMethod)

    private static void MyCommonExceptionHandlingMethod(object sender, ThreadExceptionEventArgs t)
    {
        //Exception handling...
    }

Редактировать: В приложениях Windows Forms, когда в приложении возникает исключение (в основном потоке или во время асинхронных вызовов), вы можете перехватить его, зарегистрировавшись.для события ThreadException в Приложении.

РЕДАКТИРОВАТЬ 2

Попробуйте с совместимостью?Если все работает нормально, значит, есть что-то, что не совместимо с Win7.enter image description here

1 голос
/ 25 июля 2011

Вы можете запустить программу в режиме совместимости с Windows XP

0 голосов
/ 25 июля 2011

Faulting module name: ntdll.dll говорит, что вам будет очень весело, но вы должны начать с любых P / Invokes в вашем коде.Не должно быть возможности вызвать такую ​​ошибку из .NET, поэтому вы вызываете какую-то нативную DLL.

P / Invoke позволяет вам вызывать нормальные, нативные неуправляемые исполняемые файлы из управляемого кода.Это может быть что-либо, что не запрограммировано в .NET - то есть библиотеки чертежей, библиотеки аудио и т. Д. Возможно, вы используете это, не зная, например, если у вас есть мультимедийные элементы управления.Здесь есть довольно приличная статья .

Если вы используете COM Interop с Microsoft Office, применимо то же, что и выше.Убедитесь, что это та же версия Office, и даже если это так, вам могут понадобиться те же версии Первичных сборок взаимодействия от Microsoft.

Вы также можете попробовать запустить приложение из Visual Studioвы можете получить трассировку стека, которая сообщает вам точный путь, по которому приложение прошло до сбоя.Тогда ты узнаешь, что происходит.

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