Question

J'ai des problèmes avec l'une de nos applications. C'est un processus .NET 3.5 32 bits. Au démarrage, nous ouvrons un fichier .mdb pour lire quelques "métadonnées". valeurs. Cela fonctionne sur des centaines de systèmes, mais nous avons un client avec un TabletPC et des problèmes. Le système d'exploitation est Windows XP Tablet PC SP3, 32 bits, bla bla. Rien d'inhabituel. Il dispose de .NET 3.5 (à partir de Windows Update) Tous à jour. Rien d’extraordinaire.

Dans la mesure où notre application effectue un "peu de choses" au démarrage, j'ai créé l'application console la plus simple à ce jour:

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

Résultats:

Si nous exécutons ce fichier .exe unique sans le fichier "metadata.mdb" dans le même chemin, nous obtenons l’évident: "fichier non trouvé bla bla bla". C'est correct.

Si nous copions les métadonnées ( plus sur les métadonnées plus tard ), nous obtenons ceci:

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

Remarque: l'exception était en espagnol et je l'ai traduite, mais le contenu reste identique, les seules différences sont "l'exception du type", mais les espaces de noms ne sont pas modifiés

Que contiennent les métadonnées? : C'est un simple fichier MS ACCESS 2000 avec une table et quelques enregistrements (il stocke différentes chaînes de connexion MS-SQL sous une forme cryptée). Ainsi, au démarrage, nous pouvons lire les connexions, les décrypter et présenter une liste à choisir par l'utilisateur. différentes connexions. Aucune de ces fonctionnalités n'est présente (ou exécutée) dans le programme de test que j'ai créé, car l'exception est levée (apparemment) dans la connexion.Open ()

En savoir plus sur cet ordinateur La boîte semble normale. Nous avons réinstallé .NET à partir de différentes sources (Windows Update) et du fichier dotnetfx.exe (le gros fichier de 250 Mo) et nous avons même exécuté une "réparation". à partir de ce grand installateur .net. .NET semble fonctionner, car cette petite application console cible .NET 3.5.

Pourquoi ce test? La raison pour laquelle l’application de console ne fait que c’est que c’est parce que notre propre application fait (parmi quelques autres choses) que dès qu’elle commence à exécuter Main (), c’est une des premières choses que nous faisons, j’ai donc isolé ce morceau de code et découvert que l'exception est jetée là. Afin de nous assurer qu'aucun de nos codes n'avait quoi que ce soit à faire, j'ai créé l'application de test et trouvé l'exception bizarre.

Qu'en est-il de Google? Je cherchais frénétiquement google / SO / etc. en vain. OutOfMemory est un terme de recherche très trompeur, même associé à oledb et à d'autres termes "possible". mots-clés (mais il se peut que je manque quelque chose). Essayer de chercher en utilisant d'autres parties des espaces de noms, pointe vers des résultats étranges qui ne semblent pas être liés à ce problème particulier.

Quelle est la question? Oh, c'est simple: des idées?

Capture J'essaie d'éviter de réinstaller Windows tout entier (ce qui pourrait tout aussi bien résoudre le problème, étant donné que cette chose simple fonctionne sur des centaines d'autres ordinateurs). La boîte ne semble pas être infectée par un logiciel malveillant ou similaire, il s'agit d'un Tablet PC utilisé dans le secteur de la santé, de sorte que l'accès à Internet est bien "ouvert". est rarement utilisé s'il est utilisé. Cela ne signifie pas que la boîte est propre à 100% (vous ne pouvez jamais être sûr avec Windows). Si vous connaissez ou avez rencontré ce problème (et si vous avez trouvé un correctif), veuillez m'éclairer.

Merci d'avance!

Était-ce utile?

La solution

Cela est mort depuis plus d'un an maintenant, et j'ai depuis porté le code à un seul petit fichier XML. Nous n'avons eu aucun problème depuis lors.

En gros, l'application démarre et si elle ne détecte pas le XML, elle recherche la MDB. Si elle le trouve, elle essaie de l'ouvrir (en recherchant toujours les erreurs éventuelles). Si elle peut l'ouvrir, elle lit contenu et crée le XML, l’enregistre et ferme définitivement la MDB:)

Cela a fonctionné avec plus de 1000 machines jusqu'à présent, mais la cause de l'erreur de mémoire est toujours inconnue.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top