Frage

Ich habe Probleme mit einem unserer Anwendungen. Es ist .NET 3.5 32-Bit-Prozess. Beim Start öffnen wir eine .mdb ein paar „Metadaten“ Werte zu lesen. Dies funktioniert auf Hunderte von Systemen, aber wir haben einen Kunden mit einem TabletPC und Problemen. Das Betriebssystem ist Windows XP Tablet PC SP3, 32 Bit, bla bla. Nichts Ungewöhnliches. Es hat .NET 3.5 (Windows Update) alle auf dem neuesten Stand. Nichts Außergewöhnliches.

Da unsere Anwendung tut „ein paar Dinge“ während des Starts habe ich die einfachste Konsolenanwendung erstellt je:

namespace TestAccessConnection
{
    class Program
    {
        static void Main( string[] args )
        {
            OleDbConnection connection;
           try
            {
                connection =
                    new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=metadata.mdb;Persist Security Info=False");
                connection.Open();
                connection.Close();
                Console.Read();
            }
            catch ( Exception e )
            {
                Console.WriteLine(e.ToString());
                Console.Read();
            }
        }
    }
}

Ergebnisse:

Wenn wir ausführen, dass einzelne EXE, ohne die Datei „metadata.mdb“ in dem gleichen Weg, wir das Offensichtliche erhalten: „Datei nicht gefunden bla bla bla“. Das ist richtig.

Wenn wir kopieren Sie die Metadaten ( mehr auf Metadaten später ), bekommen wir diese:

System.OutOfMemoryException: An exception of type 'System.OutOfMemoryException' has occurred.
  at System.Data.Common.ADP.IsSysTxEqualSysEsTransaction()
  at System.Data.Common.ADP.NeedManualEnlistment()
  at System.Data.OleDb.OleDbConnection.Open()
  at TestAccessConnection.Program.Main(String[] args

Hinweis: war die Ausnahme in Spanisch und übersetzte ich es, aber der Inhalt bleibt gleich, die einzigen Unterschiede waren die „eine Ausnahme vom Typ“, aber die Namensräume sind unberührt

Was in den Metadaten ist ?: Es ist eine einfache MS ACCESS 2000-Datei mit einem Tisch und ein paar Aufzeichnungen (es speichert verschiedene MS-SQL-Verbindungszeichenfolgen in verschlüsselter Form), so beim Start wird die Anschlüsse lesen kann, entschlüsseln und eine Liste präsentiert für den Anwender zur Auswahl verschiedene Verbindungen. Keine dieser Funktionalität vorhanden ist (oder ausgeführt) im Testprogramm die ich angelegt habe, da die Ausnahme ausgelöst wird (scheinbar) in der connection.Open ()

Mehr über diesen Computer insbesondere Die Box scheint normal. Wir haben .NET aus verschiedenen Quellen (Windows Update) und die dotnetfx.exe (die große 250MB-Datei) neu installiert und sogar eine „Reparatur“ von den großen .net Installer ausgeführt. .NET scheint da diese kleine Konsolenanwendung Ziele zu arbeiten, .NET 3.5.

Warum dieser Test? Der Grund, warum die Konsolenanwendung nur tut, dass es ist, weil unsere eigene Anwendung tut (unter ein paar anderen Dingen), sobald es Haupt beginnt mit der Ausführung (), es ist eines der ersten Dinge, die wir tun, so isolierte ich dieses Stück Code und fand heraus, dass die Ausnahme dort geworfen wird. Um sicher zu stellen, dass keine unserer Code nichts zu tun hatte, habe ich die Testanwendung und fand die seltsame Ausnahme.

Was ist Google? Ich habe verzweifelt gesucht google / SO / etc. umsonst. OutOfMemory ist eine sehr irreführenden Suchbegriffs, auch wenn sie mit oledb und anderen „möglich“ keywords ( 'tho ich etwas werden könnte, fehle). mit anderen Teilen der Namensräume suchen Der Versuch, verweist auf seltsame Ergebnisse, die scheinen nicht zu diesem speziellen Thema zusammenhängen.

Was ist die Frage? Oh, das ist einfach: Irgendwelche Ideen

?

Fang Ich versuche, das ganze Fenster (die auch das Problem beheben, da könnten, dass diese einfache Sache funktioniert auf Hunderte von anderen Computern) zu vermeiden, neu zu installieren. Die Box wird nicht mit Malware oder ähnliche infiziert zu werden, ist es ein Tablet PC in Gesundheitswesen verwendet, so dass der Internetzugang zwar „offen“ wird selten verwendet, wenn überhaupt verwendet. Das bedeutet nicht, die Box 100% sauber ist (man kann nie unter Windows sicher sein). Wenn Sie wissen, oder haben dieses Problem aufgetreten ist (und ein Update gefunden), bitte erleuchte mich.

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Das ist nun seit über einem Jahr tot, und ich habe den Code da portiert eine einzelne kleine XML-Datei zu verwenden. Wir haben keine Probleme seitdem haben.

Im Grunde die App startet und wenn es nicht die XML erkennt, sieht es für die MDB, wenn er sie findet, versucht er, sie zu öffnen (immer auf mögliche Fehler zu kontrollieren), wenn sie es öffnen kann, liest er die Inhalte und erstellt die XML, speichert sie und schließt die MDB immer:)

Es ist mit mehr als 1000 Maschinen gearbeitet bisher jedoch die Ursache für den Speicherfehler ist noch unbekannt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top