Quelles sont les causes et les solutions du code d’exception c0000005 dans mscorwks.dll?

Le code d’exception C0000005 provient de mscorwks.dll lorsque l’application est exécutée sur Windows Server 2008 R2 lancée à l’aide de test complete. Les autres plates-formes (Windows XP, Server 2003 R2, Windows 7 32 bits et 64 bits) ne présentent pas cette exception.

Le journal des événements d’une seule exécution comporte bon nombre des événements suivants avec l’ID d’événement 1023 généré par le runtime .NET:

Version 2.0.50727.4952 .NET Runtime – Erreur de moteur d’exécution fatale (7383851A) (80131506)

L’application elle-même utilise une interface SOAP générée par Visual Studio à partir d’un fichier WSDL , un object COM avec une interop intégrée, et cible .NET 4.

sfc / scannow a été exécuté et n’a détecté aucun problème de fichiers système sur le système affecté.

Quel dépannage peut être fait pour identifier une solution?

Une erreur d’exécution fatale du moteur et une violation d’access sont les deux symptômes du même problème. FEEE est déclenché lorsque le récupérateur de mémoire .NET détecte que la structure interne du segment de mémoire récupéré est détruite. Une violation d’access est une exception matérielle, déclenchée par le processeur lorsqu’il est invité à accéder à la mémoire avec une adresse non valide. Une cause commune d’un AV est la corruption de tas.

Ce genre d’incident est très souvent causé par un code non géré. Il est également assez courant que des codes non gérés contiennent des bogues de gestion de la mémoire qui peuvent restr inaperçus pendant longtemps. Le type de dégâts que le bogue peut causer a tendance à être aléatoire. Le simple fait de l’exécuter sur un autre système d’exploitation doté d’un modèle d’allocation de mémoire différent peut suffire à déclencher la bombe.

Vous avez un excellent candidat pour la source du problème. Vous aurez besoin de travailler avec le fournisseur de serveur COM ou l’auteur pour chasser le bogue.

Un 0xC0000005 est un code d’exception renvoyant une erreur Win32 qui signifie “Accès refusé”. Étant donné que vous utilisez COM interop et obtenez une ExecutionEngineException (dans COM, COR_E_EXECUTIONENGINE ; 0x80131506), je suppose que c’est un pointeur NULL dans le composant COM ou une directive ComImport défectueuse dans votre code .NET .

Cette erreur est due à des failles dans la façon dont TestComplete 7 interagit avec le tas dans des applications mixtes gérées / non gérées. Au lieu d’utiliser la méthode TestedApp.Run à l’aide du bloc de code suivant, modifié pour votre choix de langage de script, présenté dans VBScript :

 Dim oScript, command Set oScript = CreateObject("WScript.Shell") command = "%comspec% /c " & PATH_TO_EXE & " " & Args oScript.Run command, 10, True 

L’article MSDN pertinent est Run Method (Windows Script Host) .

TestComplete 7 (y compris la dernière mise à jour 7.52) prend en charge .NET Framework 4 uniquement jusqu’à la version .NET 4 Bêta 2. Il ne prend pas en charge la version finale de Framework, ce qui peut expliquer le problème.

Essayez de créer l’application ciblant .NET 2.0. Cela devrait résoudre le problème.

Pour tester les applications .NET 4, vous devez utiliser TestComplete 8 .