Каковы причины и решения кода исключения c0000005 в mscorwks.dll?

Код исключения C0000005 генерируется из mscorwks.dll, когда приложение запускается в Windows Server 2008 R2, запущенной с помощью завершения теста. Другие платформы (Windows XP, Server 2003 R2, Windows 7 32-разрядная и 64-разрядная) не представляют этого исключения.

Журнал событий из одного выполнения содержит множество следующих событий с идентификатором 1023, вызванным средой выполнения.NET:

.NET Runtime версия 2.0.50727.4952 - Неустранимая ошибка механизма выполнения (7383851A) (80131506)

Само приложение использует интерфейс SOAP, сгенерированный Visual Studio из файла WSDL, COM-объект со встроенным взаимодействием и предназначается для .NET 4.

SFC / SCANNOW был запущен и не обнаружил проблем с системными файлами в уязвимой системе.

Какие способы устранения неполадок можно предпринять, чтобы определить решение?

4 ответа

Решение

Эта ошибка вызвана недостатками в том, как TestComplete 7 взаимодействует с кучей в смешанных управляемых / неуправляемых приложениях. Вместо использования TestedApp.Run Метод, использующий следующий блок кода, модифицированный для выбора языка сценариев, представленный в VBScript:

Dim oScript, command
Set oScript = CreateObject("WScript.Shell")

command = "%comspec% /c " & PATH_TO_EXE & " " & Args
oScript.Run command, 10, True 

Соответствующей статьей MSDN является Run Method (Windows Script Host).

Неустранимая ошибка выполнения движка и нарушение прав доступа являются симптомами одной и той же проблемы. FEEE повышается, когда сборщик мусора.NET обнаруживает, что внутренняя структура кучи собранного мусора уничтожена. Нарушение доступа - это аппаратное исключение, которое вызывается процессором, когда его просят получить доступ к памяти с неверным адресом. Распространенной причиной AV является повреждение кучи.

Подобные сбои очень часто вызваны неуправляемым кодом. Также неуправляемый код довольно часто имеет скрытые ошибки управления памятью, которые могут оставаться незамеченными в течение длительного времени. Вид повреждения, который может нанести жук, бывает довольно случайным. Для запуска бомбы может быть достаточно просто запустить его в другой операционной системе с другим шаблоном распределения памяти.

У вас есть отличный кандидат на источник проблемы. Вам нужно будет поработать с поставщиком или автором COM-сервера, чтобы отследить ошибку.

0xC0000005 - это код исключения, заключающий в себе ошибку Win32, что означает "Отказано в доступе". Учитывая, что вы используете COM-взаимодействие и получаете исключение ExecutionEngineException (в COM, COR_E_EXECUTIONENGINE; 0x80131506), я предполагаю, что это либо указатель NULL в компоненте COM, либо неисправный ComImport директива в вашем .NET коде.

TestComplete 7 (включая последнее обновление 7.52) поддерживает.NET Framework 4 только до версии.NET 4 Beta 2. Он не поддерживает выпускную версию Framework, поэтому это может быть причиной проблемы.

Попробуйте создать приложение для.NET 2.0. Это должно решить проблему.

Для тестирования приложений.NET 4 вам необходимо использовать TestComplete 8.

Другие вопросы по тегам