6

Kod wyjątku C0000005 jest generowany z pliku mscorwks.dll, gdy aplikacja działa w systemie Windows Server 2008 R2 uruchomionym przy użyciu testu zakończonego. Inne platformy (Windows   XP, Server 2003 R2, Windows   7 32-bitowych i 64-bitowych) nie przedstawiają tego wyjątku.Jakie są przyczyny i rozwiązania kodu wyjątku c0000005 w mscorwks.dll?

Dziennik zdarzeń z pojedynczego wykonania ma wiele z następujących zdarzeń z identyfikatorem zdarzenia 1023 podniesiony przez środowisko .NET:

.NET Runtime wersja 2.0.50727.4952 - Fatal Error Execution Engine (7383851A) (80131506)

sama aplikacja korzysta z interfejsu SOAP generowanego przez Visual Studio z pliku WSDL, obiekt COM z wbudowanym współdziałanie i jest kierowana .NET 4.

sfc/scannow został uruchomiony i nie znalazł żadnych problemów z plikami systemowymi w systemie podlegającym usterce.

Jakie problemy można rozwiązać, aby znaleźć rozwiązanie?

Odpowiedz

3

Ten błąd jest spowodowany przez błędy w sposobie, w jaki aplikacja TestComplete 7 współdziała ze stosem w mieszanych aplikacjach zarządzanych/niezarządzanych. Zamiast przy użyciu metody TestedApp.Run stosując następujący blok kodu, modyfikacji dla was wybór języka skryptowego, przedstawione w VBScript:

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

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

Odpowiedni MSDN artykuł jest Run Method (Windows Script Host).

3

0xC0000005 to kod wyjątku zawijający błąd Win32, co oznacza "Odmowa dostępu". Biorąc pod uwagę, że używasz COM interop i otrzymujesz ExecutionEngineException (w COM, COR_E_EXECUTIONENGINE; 0x80131506), domyślam się, że albo jest to NULL wskaźnik w składniku COM, albo wadliwa dyrektywa ComImport w twoim kodzie .NET.

+2

Kody wyjątków nie są kodami błędów win32 nie są HRESULTs nie są NTSTATUS. Przykro mi zirytowany zwierzak. –

+0

Wiedziałem, że ktoś to nazwie. Ok, w porządku, 0xC0000005 jest błędem Win32. Odpowiedni HRESULT to 0x80070005. – codekaizen

+0

To nie jest błąd win32. To kod wyjątku. Nakarm 0xC0000005 na np. FormatMessage, a otrzymasz nieprzydatny wynik. –

8

Błąd krytyczny wykonania silnika i naruszenie dostępu są oboma objawami tego samego problemu. FEEE jest wywoływany, gdy biblioteka zbierająca śmieci NET wykryje, że struktura wewnętrzna sterty zbierającej śmieci została zniszczona. Naruszenie dostępu to wyjątek sprzętowy, wywołany przez procesor, gdy jest on proszony o dostęp do pamięci z nieprawidłowym adresem. Częstą przyczyną AV jest uszkodzenie sterty.

Tego rodzaju wypadki są bardzo często spowodowane niezarządzanym kodem. Jest również dość powszechne, że niezarządzany kod ma ukryte błędy zarządzania pamięcią, które mogą pozostać niezauważone przez długi czas. Rodzaj obrażeń, które może popełnić błąd, jest dość przypadkowy. Uruchomienie go w innym systemie operacyjnym, który ma inny schemat alokacji pamięci, może wystarczyć do uruchomienia bomby.

Masz doskonałego kandydata na źródło problemu. Będziesz musiał popracować ze sprzedawcą lub autorem serwera COM, aby wypróbować błąd.

0

TestComplete 7 (w tym najnowsza aktualizacja 7.52) obsługuje .NET Framework 4 tylko do wersji .NET 4 Beta 2. Nie obsługuje wersji Release Framework, więc może to być przyczyną problemu.

Spróbuj skonstruować aplikację docelową .NET 2.0. To powinno rozwiązać problem.

Aby przetestować aplikacje .NET 4, należy użyć TestComplete 8.

+0

Jesteśmy świadomi ograniczeń obsługi sieci .Net w TestComplete 7. Jesteśmy obecnie w trakcie przeprowadzania się do TestComplete 8, ale powyższe działania dotyczą problemów związanych z kompatybilnością .NET 4. – Erick