web-dev-qa-db-fra.com

Le fournisseur Microsoft.Jet.OLEDB.4.0 'n'est pas enregistré sur la machine locale

J'ai créé une application Windows développée dans .NET 3.5 sur un serveur Windows 2008 32 bits. Lors du déploiement de l'application sur un serveur 64 bits, le message d'erreur "Le fournisseur Microsoft.Jet.OLEDB.4.0 'n'est pas enregistré sur la machine locale".

Donc, comme solution à ce problème, j'ai changé la propriété de génération du projet en X86, de sorte qu'il se construise en mode 32 bits et reconstruise le projet dans la machine 32 bits. Toutefois, le même projet utilise d'autres pilotes de base de données (DB2, SQL, etc.) pour se connecter à d'autres bases de données. Ainsi, lorsque j'ai déployé mon application à nouveau dans le système d'exploitation 64 bits, l'exception "Tentative de charger un assembly 64 bits sur une plate-forme 32 bits" a été levée.

J'utilise le pilote Microsoft.Jet.OLEDB.4.0 pour lire et écrire dans Excel (.xls)

182
neo

J'ai trouvé une solution à ce problème. Le problème que j'ai décrit dans ma question est essentiellement dû à l'incompatibilité du pilote Microsoft.Jet.OLEDB.4.0 dans un système d'exploitation 64 bits.

Donc, si nous utilisons le pilote Microsoft.Jet.OLEDB.4.0 sur un serveur 64 bits, nous devons forcer notre application à être intégrée en mode 32 bits (C’est la réponse que j’ai trouvée lorsque j’ai fait une recherche approfondie pour cela problème connu ) et qui provoque la rupture d'une autre partie de mon code.

Heureusement, maintenant, Microsoft a publié un pilote Office System 2010 compatible (2010) pouvant être utilisé en remplacement. pour le pilote traditionnel Microsoft.Jet.OLEDB.4.0. Cela fonctionne aussi bien sur les serveurs 32 bits que 64 bits. Je l'ai utilisé pour la manipulation de fichiers Excel et cela a bien fonctionné pour moi dans les deux environnements. Mais ce pilote est en BETA.

Vous pouvez télécharger ce pilote depuis Microsoft Access Database Engine 2010 Redistributable

229
neo

Si le problème persiste dans ASP.NET, il me suffisait de changer le paramètre "Activer les applications 32 bits" sur Vrai, dans les paramètres avancés du pool d'applications.

112
Jason Wicker

J'ai le même problème

Le fournisseur Microsoft.Jet.OLEDB.4.0 'n'est pas enregistré sur la machine locale

J'ai appliqué la réponse par neo mais cela ne fonctionnait pas tant que je ne changeais pas le fournisseur en "Provider = Microsoft.ACE.OLEDB.12.0;" dans la chaîne de connexion.

J'espère que cela aidera si quelqu'un fait face au même problème.

45
Iqbal

Je sais que ce sont des questions assez anciennes et beaucoup de personnes ont répondu. mais je résume les choses pour comprendre:

Si l'extension de fichier est xls et que le système d'exploitation est 32 bits, vous seul pouvez utiliser "Microsoft.Jet.OLEDB.4.0". Microsoft n'a pas publié la version 64 bits de ce pilote.

Si l'extension de fichier est xlsx ou que le système d'exploitation est 64 bits, vous devez utiliser "Microsoft.ACE.OLEDB.12.0". L'application compilée en mode 32/64 bits n'a aucune incidence sur la sélection du pilote.

Installez toujours le pilote 64 bits de Microsoft.ACE.OLEDB.12.0 sur le système d'exploitation 64 bits. Si vous avez déjà installé Office 32 bits, vous devez exécuter le pilote à partir de cmd avec un argument/passive. Ce hack fonctionne jusqu'à Office 2013 uniquement, Microsoft a arrêté cette solution de contournement d'Office 2016 pour les pilotes Microsoft.ACE.OLEDB.16.0.

AccessDatabaseEngine_x64.exe /passive

Télécharger les pilotes Microsoft.ACE.OLEDB.12.

private void ProcessFile(string path)
{
    string connString = string.Empty;

    if (Path.GetExtension(path).ToLower().Trim() == ".xls" && Environment.Is64BitOperatingSystem == false)
        connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
    else
        connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
}

Si Application est compilé avec l'indicateur AnyCPU, il cherchera des pilotes d'accès 64 bits sur un système d'exploitation 64 bits et des pilotes d'accès 32 bits sur un système d'exploitation 32 bits.

24
Romil Kumar Jain

J'ai le même message, j'ai une page Web avec do sur visual studio 2010, j'ai lu un fichier.xls sur cette page, dans mon projet, aucun problème ne se pose lorsque je le mets sur mon IIS local jette moi un le fournisseur 'Microsoft.Jet.OLEDB.4.0' n'est pas enregistré sur la machine locale ', j'ai corrigé le problème en suivant cette étape,

1.-Ouvrez IIS
2.-Changer l'appPool sur Réglages avancés
3.-fidèle à activer l'application 32 bits.

et c'est tout

ps.I a remplacé Configuration Manager par X86 sur Active Solution Platform.

19
leo

Si votre application s'exécute sur localIIS, vous pouvez résoudre ce problème en en activant les applications 32 bits dans les paramètres avancés d'AppPool

enter image description here

17
Mumin Ka

J'ai eu le même problème. J'ai changé la configuration de l'application en x86, puis ça a fonctionné!

8
Kakopappa

Je viens de changer ma propriété de projet en format x64

Projet ---> Propriétés ---> Build ---> Cadre cible ---> X64

7
Muhamed Shafeeq

Nous avons rencontré ce problème dans l'application de bureau.

Environnement de développement: Windows 7 Ultimate - Fournisseur .Net Framework 4.5 64 bits = Microsoft.Jet.OLEDB.4.0

Le problème a été résolu en remplaçant la cible de la plateforme par X86 à partir de n’importe quel processeur. Propriétés du projet >> Construire >> Cible de la plateforme.

enter image description here

4
Techvalens

J'ai rencontré ce problème avec mon application de bureau (le fournisseur 'Microsoft.Jet.OLEDB.4.0' n'est pas enregistré sur la machine locale). Je n'avais pas la possibilité de créer une application 32 bits. En espérant que cela aiderait d'autres personnes dans la même situation.

J'ai fait ce qui suit et le problème a disparu:

  1. Installé la version 64 bits de moteur de base de données Microsoft Access 2010 redistribuable , comme suggéré par neo

  2. Changé mon fournisseur à Microsoft.ACE.OLEDB.12.0

2
robinhood9

Bien qu'une solution plus optimale consiste simplement à recompiler comme suggéré ci-dessus, cela nécessite un accès au code source. Dans mon cas, je n'avais que le fichier .exe terminé et je devais utiliser cette solution. Il utilise CorFlags.exe du .Net SDK pour modifier les caractéristiques de chargement de l'application.

  1. Téléchargez le SDK .Net Framework (que j’ai personnellement utilisé .5 , mais la version utilisée doit être égale ou supérieure à celle requise pour .Net pour votre application.
  2. Lors de l'installation, tout ce dont vous avez besoin est CorLibs.exe, il vous suffit donc de vérifier les outils de développement Windows .
  3. Après l’installation, trouvez votre CorFlags.exe. Pour mon installation du SDK .Net Framework 3.5, il s’agissait de C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin.
  4. Ouvrez une invite de commande et tapez path/to/CorFlags.exe path/to/your/exeFile.exe /32Bit+.

Vous avez terminé! Cela définit les indicateurs de départ pour votre programme afin qu'il démarre en mode WOW64 32 bits et puisse donc accéder à Microsoft.jet.oledb.4.0.

2
Cullub

J'ai changé ma chaîne de connexion de

var myConnectionString = string.Format ("Provider = Microsoft.Jet.OLEDB.4.0; Source de données = {0}; Persist Security Info = True; Jet OLEDB: Mot de passe de la base de données =;", gisdbPath);

pour ça:

var myConnectionString = string.Format ("Provider = Microsoft.Jet.OLEDB.4.0; Mode = Partage refusé aucun; Source de données = {0}; utilisateur id = Admin; mot de passe =;", gisdbPath);

Cela fonctionne parce que je n'ai jamais demandé l'inscription de Microsoft.Jet.OLEDB.4.0.

1
Dilhan RK

Il suffit de changer la propriété en fonction de votre machine et tout a été fait :-)

Projet ---> Propriétés ---> Build ---> Cadre cible ---> X64

ou

Projet ---> Propriétés ---> Build ---> Cadre cible ---> X86

1
Ajmal

Modifier dans IIS Paramètres avancés du pool d'applications, paramètres. Activer l'application 32 bits

1
dpsrikanth

allez dans Démarrer-> Exécuter et tapez cmd cela lance l'invite de commande (également disponible dans Démarrer-> Programmes-> Accessoires-> Invite de commande)

tapez cd .. et appuyez sur Entrée tapez cd .. et appuyez à nouveau sur Entrée (continuez ainsi jusqu'à ce que l'invite affiche:>)

maintenant vous devez aller dans un dossier spécial qui peut être c:\windows\system32 ou c:\winnt\system32 ou c:\windows\sysWOW64 essayez de taper chacun de ceux-ci, par exemple cd c:\windows\sysWOW64 (si le système ne trouve pas le chemin spécifié, essayez le suivant) cd c:\windows\system32 cd c:\winnt\system32 si l’un de ceux-ci ne provoque pas une erreur, arrêtez-vous, dossier correct.

maintenant, vous devez enregistrer les DLL OLE DB 4.0 en tapant ces commandes et en appuyant sur Entrée après chaque

regsvr32 Msjetoledb40.dll regsvr32 Msjet40.dll regsvr32 Mswstr10.dll regsvr32 Msjter40.dll regsvr32 Msjint40.dll

0
user1089766

Je recevais la même exception lors de l'exécution de "Données d'importation et d'exportation de SQL Server 2014 (64 bits)" sous Windows 8.1.

Pour résoudre le problème ce problème, j'ai fait ce qui suit

Démarrage des données d'importation et d'exportation de SQL Server 2014 (32 bits) au lieu de 64 bits et cela fonctionne pour moi. Je n'ai modifié aucun paramètre IIS et n'ai installé aucun logiciel supplémentaire.

0

Il n'y a en effet pas de version 64 bits de Jet - et aucun plan (apparemment) pour en produire une.

Vous pourrez peut-être utiliser le pilote ACE 64 bits: http://www.Microsoft.com/en-us/download/details.aspx?displaylang=fr&id=23734

  • mais je ne sais pas comment cela fonctionnerait si vous deviez revenir à Jet pour vos applications 32 bits.

Cependant, vous pourrez peut-être basculer le projet en 32 bits dans la version Express (je n'ai pas essayé et 2008 n'est plus installé dans aucune version)

Peut-être qu'il est temps de supprimer complètement les bases de données Access, de mordre la balle et de choisir plutôt le serveur SQL?

0
Anant Dabhi

Dans les anciennes versions d'IIS, vous ne trouverez pas Advance Settings, vous devez donc exécuter les commandes suivantes pour activer Enable 32-bit Applications:

cscript% SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1

et

% SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i

Référence: ici

0
Usman Khalid

J'utilise VS2013 pour Winforms, la solution ci-dessous a fonctionné pour moi.

0
A Ghazal

Je sais que ce problème persiste lorsque je déploie mon application sur un nouveau serveur, car j'utilise ce pilote pour me connecter à un fichier Excel. Alors voici ce que je fais en ce moment.

Il y a Windows Server 2008 R2, j'installe les pilotes Access pour une machine x64 bits et je me débarrasse de ce message, ce qui me rend très heureux de tomber sur un autre.

Celui ci-dessous fonctionne à merveille sur ma machine de développement, mais le serveur me donne une erreur même après avoir installé les derniers pilotes ODBC, ce qui, à mon avis, est le problème, mais je l’ai résolu.

private const string OledbProviderString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\OlsonWindows.xls;Extended Properties=\"Excel 8.0;HDR=YES\"";

Je remplace par le nouveau fournisseur comme celui ci-dessous:

private const string OledbProviderString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\OlsonWindows.xlsx;Extended Properties='Excel 12.0;HDR=YES;';";

Mais comme je le fais, il y a une chose que vous devriez remarquer. L'utilisation de l'extension de fichier .xlsx et de la version Excel est 12.0.

Après que je sois dans ce message d'erreur Erreur: "Impossible de trouver ISAM installable", Je décide de changer les choses un peu comme ci-dessous:

private const string OledbProviderString =      @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\OlsonWindows.xls;Extended Properties='Excel 8.0;HDR=YES;';"; 

et oui, j'en ai fini avec cette chose méchante, mais ici j'ai un autre message Le moteur de base de données Microsoft Access ne peut pas ouvrir ou écrire dans le fichier 'time_zone'. Il est déjà ouvert exclusivement par un autre utilisateur ou vous avez besoin d'une autorisation pour afficher et écrire ses données. ce qui me dit que je ne suis pas loin de le résoudre.

Peut-être qu’un autre processus a ouvert le fichier entre-temps et que tout ce que je dois faire, c’est un redémarrage et tout va bien commencer à bien se dérouler comme prévu.

0
Nick