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)
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
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.
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.
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.
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.
J'ai eu le même problème. J'ai changé la configuration de l'application en x86
, puis ça a fonctionné!
Je viens de changer ma propriété de projet en format x64
Projet ---> Propriétés ---> Build ---> Cadre cible ---> X64
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.
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:
Installé la version 64 bits de moteur de base de données Microsoft Access 2010 redistribuable , comme suggéré par neo
Changé mon fournisseur à Microsoft.ACE.OLEDB.12.0
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.
CorLibs.exe
, il vous suffit donc de vérifier les outils de développement Windows .CorFlags.exe
. Pour mon installation du SDK .Net Framework 3.5, il s’agissait de C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin
.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.
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.
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
Modifier dans IIS Paramètres avancés du pool d'applications, paramètres. Activer l'application 32 bits
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
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.
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
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?
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
J'utilise VS2013 pour Winforms, la solution ci-dessous a fonctionné pour moi.
Téléchargement: http://www.Microsoft.com/en-us/download/details.aspx?displaylang=fr&id=23734
Ensuite, définissez VS Target Platform sur x86.
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.