2017-07-25 3 views
0

Ich leide einen frustrierenden Fehler für die letzten zwei Wochen in einer vb.net Anwendung für meine Firma entwickelt.System.AccessViolationException nach einer zweiten Verwendung einer ADODB-Verbindung

Die Anwendung besteht aus einer Basisschnittstelle (Windows Form Anwendung) einige Daten (Dateipfade und Koordinaten) zu erhalten und verarbeitet dann eine Vielzahl von Informationen aus einer Stahlkonstruktion modellierte in einer externen Anwendung aufgerufen kommenden Staad.Pro (sehr häufig in der Öl & Gas-Sektor) und von mehreren Excel Dateien.

So wird es externe Informationen aus zwei Quellen:

  • A Staad.Pro Datei, durch die Bibliothek openstaad.dll, verteilt mit Staad.Pro.
  • Einige Excel-Dateien, durch die ADO-Verbindung und Recordset Objekte.

Die Anwendung wurde seit drei Jahren zufriedenstellend verwendet. Ich habe kürzlich einige Änderungen vorgenommen, um den Hintergrundprozess der Daten und die Definition der Konfiguration für jedes Projektunternehmen einzuführen, indem eine externe Excel-Datei verwendet wurde, die zuvor auf Codeebene definiert wurde.

Diese Konfigurationsdatei wird direkt in Excel gelesen, wobei eine Anwendungsinstanz (Excel) geöffnet wird, während die anderen Excel-Dateien mit ADO wie bereits erwähnt geöffnet werden. Gleichzeitig wird der Konfigurationsdateipfad in einer einzelnen Textdatei definiert, die von der Anwendung immer zum Lesen dieses Pfads verwendet wird. Dieser Inhalt kann mithilfe der Anwendung über ein OpenFileDialog Objekt geändert werden.

Ich spezifiziere insbesondere diese Punkte, weil sie die Änderungen sind, die ich vor dem Auftreten des Fehlers gemacht habe. Es gab auch zwei Wochen Inaktivität wegen meiner Ferien, während denen einige Windows-Updates veröffentlicht wurden (ich nehme an, einige von ihnen sind mit der beliebten Ransomware Wannacry und Petya verbunden).

So wird die Fehlermeldung mir die Anwendung in VS Gemeinschaft 2015 zum Laufen bringen ist folgende:

Eine nicht behandelte Ausnahme des Typs 'System.AccessViolationException' in mscorlib.dll aufgetreten.

Zusätzliche Informationen: Versucht zu lesen oder schreibgeschützten Speicher. Dies ist oft ein Hinweis darauf, dass der andere Speicher beschädigt ist.

Es erscheint, wenn die Anwendung die zweite ADO mit dem folgenden Code an einem Excel-Datei öffnet connectionn:

cnn1.Open("Provider=Microsoft.ace.OLEDB.12.0;" & 
      "Data Source=" & rutaarchivo & ";" & 
      "Extended Properties=""Excel 12.0;HDR=Yes"";") 

Die erste Verbindung wird geschlossen, und das entsprechende Objekt zu Nothing eingestellt ist. Ich habe den Zugriff auf diese Datei geändert, um den Fehler zu verstehen und ADO zu vermeiden, aber der Fehler tritt erneut in einer späteren Verbindung mit einer anderen Excel-Datei mit ADO auf, die wiederum die zweite ADO-Verbindung nach den Änderungen ist.

Der Fehler tritt zufällig auf, so dass, wenn das Projekt gerade in VS Community 2015 geöffnet wird und dann zum ersten Mal ausgeführt wird, kein Fehler (normalerweise) auftritt, aber nach einer zweiten Ausführung.

Andere Zeiten der Fehler tritt bei dem Aufruf der Unterroutine, die die ADO-Verbindung zu der Excel-Datei macht, nicht auf den Code des Unterprogramms selbst, mit einer anderen Nachricht:

Managed Debugging-Assistent ‚FatalExecutionEngineError 'hat ein Problem in (Pfad) gefunden.

Weitere Informationen: Die Laufzeit hat einen schwerwiegenden Fehler festgestellt. Die Adresse des Fehlers war 0x79f387d1, auf Thread 0x168c. Der Fehlercode lautet 0xc0000005. Dieser Fehler kann ein Fehler in der CLR oder in den unsicheren oder nicht verifizierbaren Teilen des Benutzercodes sein. Häufige Quellen dieses Fehlers gehören Benutzer Marshalling-Fehler für COM-Interop oder PInvoke, die den Stapel beschädigen können.

Wenn Sie nach einem Fehlermuster suchen fand ich eine andere Fehler, wenn ich die gleiche Art von Objekt der Bibliothek openstaad.dll, mit der folgenden Meldung verwenden zum zweiten Mal erscheint: Eine Ausnahme

vom Typ 'System.Runtime.InteropServices.COMException' ist in Microsoft.VisualBasic.dll aufgetreten, wurde aber nicht im Benutzercode behandelt Zusätzliche Informationen: La memoria está bloqueada. (Excepción de HRESULT: 0x8002000D (DISP_E_ARRAYISLOCKED))

ich zwei Artikel im Internet über diesen Fehler (System.AccessViolationException) gefunden habe:

Programs randomly getting System.AccessViolationException

https://www.codeproject.com/Questions/106826/OpenFileDialog-OleDbConnection-AccessViolationExce

Ich habe versucht, Access Datenbankmodul neu zu installieren, um die genannte Umgebungsvariable zu definieren und die .NET Framework Version zu ändern. Nichts funktioniert.

Jede Hilfe, um dieses Problem zu lösen, wird geschätzt.

Alberto Ruiz

+1

Sie haben geschrieben "Die erste Verbindung ist geschlossen und das entsprechende Objekt ist auf' Nothing' gesetzt - Sie sollten es nicht auf 'Nothing' setzen, Sie sollten' .Dispose() 'darauf verwenden, damit es bereinigt werden kann richtig auf. Zweitens für den Teil, in dem Sie eine Anwendungsinstanz von Excel verwenden: [Die richtige Methode, um Excel-com-Objekte mithilfe von VB.NET zu verteilen.>(https://StackOverflow.com/a/38111107/1115360) –

+0

Hallo Andrew: Ich denke, Sie können nicht eine ADODB-Verbindung entsorgen. Ich folge den Hinweisen in diesem Artikel, um das Verbindungsobjekt aus dem Speicher freizugeben. Ich habe keine Probleme mit Excel. Ich schließe den Excel-Prozess mit der API-Funktion PostMessage. Vielen Dank für Ihre Antwort. – AlbertoRuiz

+0

Der Punkt ist, dass ich jetzt Probleme mit ADODB habe, die plötzlich ohne Änderungen in den Code, den ich in meiner Anwendung ADODB-Verbindungen verwendet, entstanden sind. – AlbertoRuiz

Antwort

0

erleben ich den gleichen Fehler vor kurzem nach dem zweiten Einsatz einer Microsoft.ACE.OLEDB.12.0 Verbindung zu MS Access in diesem Fall.

Was half mir, wickelte die Verbindung in einem neuen Thread. Zum Beispiel: Wenn Sie Ihre problematische Code, der die Verbindung öffnet sich in Methode ist OpenExcel Sie Folgendes tun können: dies hilft

(new Thread(() => OpenExcel())).Start(); 

Hoffnung.

Verwandte Themen