Каковы причины и решения кода исключения 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.