Obtenir une liste de tous les Accès ACE.OLEDB les pilotes installés sur le système

En utilisant le code suivant je peux énumérer les fournisseurs OLEDB enregistré sur mon système

static void DisplayData() {
   var reader = OleDbEnumerator.GetRootEnumerator();

   var list = new List<String>();
   while (reader.Read()) {
      for (var i = 0; i < reader.FieldCount; i++) {
         if (reader.GetName(i) == "SOURCES_NAME") {
            list.Add(reader.GetValue(i).ToString());
         }
      }
      Console.WriteLine("{0} = {1}", reader.GetName(0), reader.GetValue(0));
   }
   reader.Close();
}

Elle renvoie la liste des pilotes (nous sommes intéressés par les pilotes d'Accès) avec une mise en garde..

Contre .net 4.5 il contient:

SOURCES_NAME = Microsoft.ACE.OLEDB.15.0

mais quand le projet est construit contre .net 4.0 la sortie est:

SOURCES_NAME = Microsoft.ACE.OLEDB.12.0

la machine, nous avons sont à l'essai sur 32 bits d'Office 2013 est installé (qui a le Microsoft.ACE.OLEDB.15.0) et nous avons installé la version 64 bits de la base de données Access driver (qui a Microsoft.ACE.OLEDB.12.0). Le projet que nous sommes en cours d'exécution est fixé à AnyCPU, nous sommes à l'aide de Windows 8.1.

Pourquoi ne pas l'énumération toujours les mêmes résultats?

Comment puis-je obtenir une liste de tous les fournisseurs installés sur mon système? La raison pour laquelle je veux, c'est que généralement je veux courir contre le pilote le plus récent, mais pour certaines connexions j'ai besoin d'utiliser une version antérieure du pilote. (c'est parce que j'ai parfois besoin de faire une mise à niveau de vieux .les fichiers mdb), Donc si l'ancienne version n'est pas installé je tiens à informer mes utilisateurs.

Divers étrangeté:

Si nous créer une application de console contre .net 4.5.1 alors la changer .net 4.0 et l'exécuter ensuite le changer en arrière .net 4.0, il continue à renvoyer l' .net 4.0 résultats (Microsoft.ACE.OLEDB.12.0 pilote)

OriginalL'auteur Xiaosu | 2014-02-06