Domanda

Sto riscontrando problemi con una delle nostre applicazioni. È un processo .NET 3.5 a 32 bit. All'avvio apriamo un .mdb per leggere alcuni "metadati" valori. Funziona su centinaia di sistemi, ma abbiamo un cliente con un TabletPC e problemi. Il sistema operativo è Windows XP Tablet PC SP3, 32 bit, bla bla. Niente di insolito. Ha .NET 3.5 (da Windows Update) Tutto aggiornato. Niente di straordinario.

Dal momento che la nostra applicazione fa alcune "poche cose" durante l'avvio, ho creato l'applicazione console più semplice di sempre:

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();
            }
        }
    }
}

Risultati:

Se eseguiamo quel singolo .exe senza il file " metadata.mdb " nello stesso percorso, otteniamo l'ovvio: " file non trovato bla bla bla " ;. È corretto.

Se copiamo i metadati ( più sui metadati in seguito ), otteniamo questo:

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

nota: l'eccezione era in spagnolo e l'ho tradotto, ma il contenuto rimane lo stesso, le uniche differenze erano la "eccezione di tipo", ma gli spazi dei nomi non sono stati toccati

Cosa c'è nei metadati? : È un semplice file MS ACCESS 2000 con una tabella e un paio di record (memorizza stringhe di connessione MS-SQL diverse in un formato crittografato), quindi all'avvio possiamo leggere le connessioni, decodificarle e presentare un elenco per l'utente di scegliere connessioni diverse. Nessuna di queste funzionalità è presente (o eseguita) nel programma di test che ho creato, poiché l'eccezione viene generata (apparentemente) nella connessione. Apri ()

Ulteriori informazioni su questo computer in particolare La scatola sembra normale. Abbiamo reinstallato .NET da diverse fonti (Windows Update) e dotnetfx.exe (il grande file da 250 MB) e persino eseguito una "riparazione" da quel grande programma di installazione .net. .NET sembra funzionare, poiché questa piccola applicazione console è destinata a .NET 3.5.

Perché questo test? Il motivo per cui l'applicazione console fa solo che è perché la nostra stessa applicazione (tra le altre cose) che non appena inizia l'esecuzione di Main (), è una delle prime cose che facciamo, quindi ho isolato quel pezzo di codice e scoperto che l'eccezione viene generata lì. Per assicurarmi che nessuno dei nostri codici avesse qualcosa da fare, ho creato l'applicazione di test e ho trovato la strana eccezione.

Che dire di Google? Ho cercato freneticamente google / SO / etc. inutilmente. OutOfMemory è un termine di ricerca molto fuorviante, anche se combinato con oledb e altri "possibili" parole chiave ("anche se potrei mancare qualcosa). Cercare di cercare utilizzando altre parti degli spazi dei nomi, indica strani risultati che non sembrano essere correlati a questo particolare problema.

Qual è la domanda? Oh, è semplice: qualche idea?

Cattura Sto cercando di evitare di reinstallare l'intero Windows (che potrebbe anche risolvere il problema, dato che questa cosa semplice funziona su centinaia di altri computer). La scatola non sembra essere infettata da malware o simili, è un Tablet PC utilizzato in ambito sanitario, quindi l'accesso a Internet sebbene "apra" viene usato raramente se usato affatto. Ciò non significa che la scatola sia pulita al 100% (non si può mai essere sicuri con Windows). Se conosci o hai riscontrato questo problema (e hai trovato una soluzione), per favore illuminami.

Grazie in anticipo!

È stato utile?

Soluzione

Questo è morto da oltre un anno e da allora ho portato il codice per usare un singolo piccolo file XML. Da allora non abbiamo avuto problemi.

Fondamentalmente l'app si avvia e se non rileva l'XML, cerca l'MDB, se lo trova, cerca di aprirlo (sempre alla ricerca di possibili errori), se può aprirlo, legge il contenuti e crea l'XML, lo salva e chiude l'MDB per sempre :)

Finora ha funzionato con più di 1000 macchine, tuttavia la causa dell'errore di memoria è ancora sconosciuta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top