El proveedor Microsoft.Jet.OLEDB.4.0 'no está registrado en la máquina local

191

Creé una aplicación de Windows desarrollada en .NET 3.5 en un servidor Windows 2008 de 32 bits. Cuando se implementa la aplicación en un servidor de 64 bits, muestra el error "El proveedor de Microsoft.Jet.OLEDB.4.0 'no está registrado en la máquina local".

Entonces, como solución a este problema, he cambiado la propiedad de compilación del proyecto a X86, para que se construya en modo de 32 bits y reconstruya el proyecto en la máquina de 32 bits. Pero, el mismo proyecto utiliza otros controladores de base de datos (DB2, SQL, etc.) para conectarse a otras bases de datos. Entonces, cuando implementé mi aplicación nuevamente en el sistema operativo de 64 bits, arroja la excepción "Intenté cargar un ensamblado de 64 bits en una plataforma de 32 bits".

Estoy usando el controlador Microsoft.Jet.OLEDB.4.0 para leer y escribir en Excel (.xls)

neo
fuente

Respuestas:

238

Encontré una solución para este problema. El problema que describí en mi pregunta ocurrió básicamente debido a la incompatibilidad del controlador Microsoft.Jet.OLEDB.4.0 en el sistema operativo de 64 bits.

Entonces, si estamos usando el controlador Microsoft.Jet.OLEDB.4.0 en un servidor de 64 bits, tenemos que forzar a nuestra aplicación a compilarse en modo de 32 bits (esta es la respuesta que encontré cuando hice una búsqueda exhaustiva de este problema conocido ) y eso hace que otra parte de mi código se rompa.

Afortunadamente, ahora Microsoft ha lanzado un controlador de sistema de Office 2010 compatible con 64 bits que se puede usar como reemplazo del controlador tradicional Microsoft.Jet.OLEDB.4.0. Funciona tanto en servidores de 32 bits como en servidores de 64 bits. Lo he usado para la manipulación de archivos de Excel y funcionó bien para mí en ambos entornos.Pero este controlador está en BETA .

Puede descargar este controlador de Microsoft Access Database Engine 2010 Redistributable

neo
fuente
66
También preste especial atención a las instrucciones en ese enlace :)
Mark
44
Tuve el mismo problema. Cambié la configuración de la aplicación a x86, ¡y funcionó!
skpaul
9
También tuve que cambiar la cadena de conexión de Microsoft.Jet.OLEDB.4.0 a Microsoft.ACE.OLEDB.12.0
Spikolynn
16
Sí, aunque hay disponible un motor de base de datos de Access compatible con 64 bits, requiere que no haya instalada una versión de 32 bits de los productos de MS Office en el sistema (por ejemplo, MS Word de 32 bits), lo cual es un gran problema. La solución alternativa es que use la versión de 32 bits de Access Database Engine 2010 y obligue a su aplicación .NET a ejecutarse en modo de 32 bits (por ejemplo, seleccionando la plataforma x86 en Configuration Manager). Y la solución adecuada es reemplazar MS Access con una mejor alternativa.
Massood Khaari el
2
pregunta novata: ¿puedo distribuir este controlador como "dentro de mi aplicación" o cada usuario que quiera usar mi aplicación tiene que instalarlo manualmente?
philx_x
117

Si el problema persiste en ASP.NET, todo lo que tuve que hacer fue cambiar la configuración "Habilitar aplicaciones de 32 bits" a Verdadero, en la Configuración avanzada para el grupo de aplicaciones.

Jason Wicker
fuente
Estaba usando ODBC de 64 bits y este cambio comenzó a darme un error en la base de datos. Aunque lo corregí. En caso de que alguien también encuentre esto, tendrá que instalar controladores ODBC de 32 bits y luego crear su DSN en eso.
Farhan Hafeez
2
Es bastante posible hacer esto completamente en código de 64 bits ahora. Instale el enlace redistribuible en la respuesta de neo , luego use la cadena de Proveedor sugerida en la respuesta de Iqbal . Luego vota ambas respuestas. ¡Eso es!
Roman Starkov
Esto solucionó el problema para mí en Windows Server 2008 R2 después de haber instalado el 3264 Access DB Engine Redist .
Chris Pickford el
2
La desventaja es que el grupo se ejecutará en modo de 32 bits. En cambio, cambiaremos a ACE para evitar esto.
wtjones
Trabajó para mí con Windows Forms también. sin código ASP.NET en absoluto
philx_x
52

Tengo el mismo problema

El proveedor Microsoft.Jet.OLEDB.4.0 'no está registrado en la máquina local

Apliqué la respuesta de neo pero no funcionó hasta que cambié el proveedor a "Proveedor = Microsoft.ACE.OLEDB.12.0;" en cadena de conexión.

Espero que esto ayude si alguien enfrenta el mismo problema.

Iqbal
fuente
44
¡Eso es todo! Para un servidor de 64 bits, instale el redistribuible vinculado por neo (la variante de 64 bits, obviamente), y luego cambie el proveedor como se especifica en esta respuesta, luego funcionará.
Roman Starkov
Tienes razón romkyns. Ya dije que apliqué la solución neo y luego cambié el proveedor. Pero gracias tu comentario lo deja más claro. Muchas gracias romkyns
Iqbal
reemplazó Microsoft.Jet.OLEDB.4.0 con Microsoft.ACE.OLEDB.12.0; en app.config y todo funcionó.
AVEbrahimi
1
Descubrí que esto funcionó, mientras que restringir la aplicación a 32 bits no hizo ninguna diferencia.
Ryan Lundy
En mi caso: "Microsoft.ACE.OLEDB.12.0 no registrado", :(
César León el
29

Sé que son preguntas bastante antiguas y muchas personas han respondido. pero estoy resumiendo las cosas para entender:

Si la extensión del archivo es xls y el sistema operativo es de 32 bits, solo usted puede usar "Microsoft.Jet.OLEDB.4.0 ". Microsoft no ha lanzado la versión de 64 bits de este controlador.

Si la extensión del archivo es xlsx o el sistema operativo es de 64 bits, debe usar "Microsoft.ACE.OLEDB.12.0 ". La aplicación compilada en modo de 32/64 bits no afecta la selección del controlador.

Instale siempre el controlador de Microsoft.ACE.OLEDB.12.064 bits en el sistema operativo de 64 bits. Si ya instaló Office 32 bit, entonces necesita ejecutar el controlador desde cmd con / argumento pasivo. Este truco solo funciona hasta Office 2013, Microsoft detuvo esta solución alternativa de Office 2016 para los controladores Microsoft.ACE.OLEDB.16.0.

AccessDatabaseEngine_x64.exe /passive

Descargar controladores Microsoft.ACE.OLEDB.12.0

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 la aplicación se compila con el indicador AnyCPU, buscará los controladores de acceso de 64 bits en el sistema operativo de 64 bits y los controladores de acceso de 32 bits en el sistema operativo de 32 bits.

Romil Kumar Jain
fuente
1
Gracias por su respuesta, sin embargo, estoy usando VS2015 en Windows 10 y X64. Cuando cambié la configuración del proyecto de AnyCPU a X86, el problema desapareció. No tuve que instalar ningún controlador adicional.
NoChance
@NoChance Creo que ya instaló Office 64 bit en su máquina y ya contiene los controladores Microsoft.ACE.OLEDB.12.0.
Romil Kumar Jain
Gracias por su respuesta, solo tengo Office 2007.
NoChance
19

Tengo el mismo mensaje, tengo una página web con do en visual studio 2010, leí un archivo .xls en esa página, en mi proyecto visual no tengo ningún problema, cuando lo puse en mi IIS local, tírenme un 'Microsoft .Jet.OLEDB.4.0 'el proveedor no está registrado en la máquina local' , arreglé el problema luego de seguir estos pasos,

1.-Abra IIS
2.-Cambie el grupo de aplicaciones en Configuración avanzada
3.-verdadero para habilitar la aplicación de 32 bits.

y eso es todo

ps.Cambié Configuration Manager a X86 en Active Solution Platform

León
fuente
Esto obliga a su aplicación a ejecutarse en modo de 32 bits. Necesita esta activación si desea evitar la barrera de 4 GB.
Brain2000
18

Si su aplicación se ejecuta en localIIS, puede resolver este problema habilitando aplicaciones de 32 bits en la Configuración avanzada de AppPool

ingrese la descripción de la imagen aquí

Mumin Ka
fuente
8

Tuve el mismo problema. Cambié la configuración de la aplicación a x86, ¡y funcionó!

Kakopappa
fuente
¿Cómo cambiar esta configuración? He creado un proyecto tipo sitio web
SHEKHAR SHETE
7

Acabo de cambiar mi propiedad del proyecto en formato x64

Proyecto ---> Propiedades ---> Compilación ---> Marco de destino ---> X64

Muhamed Shafeeq
fuente
5

Hemos encontrado este problema en la aplicación de escritorio.

Entorno de desarrollo: Windows 7 Ultimate - Proveedor de .Net Framework 4.5 de 64 bits = Microsoft.Jet.OLEDB.4.0

Se ha resuelto cambiando el objetivo de la plataforma a X86 desde cualquier CPU. Propiedades del proyecto >> Build >> Platform Target.

ingrese la descripción de la imagen aquí

Techvalens
fuente
2

Me encontré con este problema con mi aplicación de escritorio (el proveedor 'Microsoft.Jet.OLEDB.4.0' no está registrado en la máquina local). No tenía la opción de compilar como una aplicación de 32 bits. Esperando que esto ayude a otros en la misma situación.

Hice lo siguiente y el problema desapareció:

  1. Instalé la versión de 64 bits de Microsoft Access Database Engine 2010 Redistributable , como lo sugiere neo

  2. Cambié mi proveedor a Microsoft.ACE.OLEDB.12.0

robinhood9
fuente
2

Aunque una solución más óptima es simplemente recompilar como se sugirió anteriormente, eso requiere acceso al código fuente. En mi caso, solo tenía el .exe terminado y tuve que usar esta solución. Utiliza CorFlags.exeel SDK .Net para cambiar las características de carga de la aplicación.

  1. Descargue el SDK de .Net Framework (yo personalmente usé 3.5 , pero la versión utilizada debe ser igual o superior a la .Net requerida para su aplicación.
  2. Al instalar, todo lo que necesita es CorLibs.exe, así que simplemente verifique las Herramientas de desarrollo de Windows .
  3. Después de la instalación, encuentre su CorFlags.exe. Para mi instalación del .Net Framework 3.5 SDK, estaba en C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin.
  4. Abra un símbolo del sistema y escriba path/to/CorFlags.exe path/to/your/exeFile.exe /32Bit+.

Ya terminaste! Esto establece los indicadores de inicio de su programa para que se inicie en modo WOW64 de 32 bits y, por lo tanto, pueda acceder a microsoft.jet.oledb.4.0.

Cullub
fuente
1

Cambio en la configuración avanzada del grupo de aplicaciones de configuración de IIS.Habilite la aplicación de 32 bits

dpsrikanth
fuente
1

Simplemente cambie la propiedad en función de su máquina y todo habrá hecho :-)

Proyecto ---> Propiedades ---> Compilación ---> Marco de destino ---> X64

o

Proyecto ---> Propiedades ---> Compilación ---> Marco de destino ---> X86

Ajmal
fuente
1

He cambiado mi cadena de conexión de

var myConnectionString = string.Format ("Proveedor = Microsoft.Jet.OLEDB.4.0; Fuente de datos = {0}; Información de seguridad persistente = True; Jet OLEDB: Contraseña de la base de datos =;", gisdbPath);

a esto:

var myConnectionString = string.Format ("Provider = Microsoft.Jet.OLEDB.4.0; Mode = Share Deny None; Source Data = {0}; user id = Admin; password =;", gisdbPath);

Funciona porque nunca pedí Microsoft.Jet.OLEDB.4.0 'registrado.

Dilhan RK
fuente
0

De hecho, no hay una versión de Jet de 64 bits, y no hay planes (aparentemente) para producir una.

Es posible que pueda utilizar el controlador ACE de 64 bits: http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=23734

  • pero no tengo idea de cómo funcionaría si necesita volver a Jet para sus aplicaciones de 32 bits.

Sin embargo, es posible que pueda cambiar el proyecto a 32 bits en la versión Express (no lo he probado y ya no tengo 2008 instalado)

¿Tal vez es hora de desechar las bases de datos de Access por completo, morder la bala y optar por el servidor SQL?

Anant Dabhi
fuente
0

En versiones anteriores de IIS, no lo encontrará Advance Settingspara Enable 32-bit Applicationsque pueda ejecutar los siguientes comandos:

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

y

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

Referencia: aquí

Usman Khalid
fuente
0

Recibí la misma excepción al ejecutar "Importar y exportar datos de SQL Server 2014 (64 bits)" en mi Windows 8.1.

Para solucionar este problema, hice lo siguiente

inició SQL Server 2014 Importar y exportar datos (32 bits) en lugar de 64 bits y está funcionando para mí. No he cambiado ninguna configuración de IIS y no he instalado ningún software adicional.

Banketeshvar Narayan
fuente
0

Sé que tengo este problema una y otra vez cuando implemento mi aplicación en un nuevo servidor porque estoy usando este controlador para conectarme a un archivo de Excel. Así que aquí está lo que estoy haciendo últimamente.

Hay un Windows Server 2008 R2, instalo los controladores de Access para una máquina de x64 bits y me deshago de este mensaje, lo que me hace muy feliz de encontrarme con otro.

Este aquí abajo funciona espléndidamente en mi máquina de desarrollo, pero en el servidor me da un error incluso después de instalar los últimos controladores ODBC, lo que creo que este es el problema, pero así es como lo resolví.

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

Reemplazo con el nuevo proveedor como este a continuación:

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

Pero mientras hago esto, hay una cosa que debes notar. El uso de la extensión de archivo .xlsx y la versión de Excel es 12.0.

Después de entrar en este mensaje de error Error: "No se pudo encontrar el ISAM instalable" , decido cambiar las cosas un poco como a continuación:

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

y sí, he terminado con esa cosa desagradable, pero aquí recibí otro mensaje. El motor de la base de datos de Microsoft Access no puede abrir o escribir en el archivo 'time_zone'. Ya está abierto exclusivamente por otro usuario, o necesita permiso para ver y escribir sus datos.lo que me dice que no estoy lejos de resolverlo.

Tal vez hay otro proceso que abrió el archivo mientras tanto y todo lo que tengo que hacer es reiniciar y todo comenzará a funcionar sin problemas como se esperaba.

Mella
fuente
0

vaya a Inicio-> Ejecutar y escriba cmd, esto iniciará el Símbolo del sistema (también disponible en Inicio-> Programas-> Accesorios-> Símbolo del sistema)

escriba cd .. y presione regresar escriba cd .. y presione regresar nuevamente (siga haciendo esto hasta que aparezca el mensaje:>)

ahora necesita ir a una carpeta especial que podría ser c: \ windows \ system32 o podría ser c: \ winnt \ system32 o podría ser c: \ windows \ sysWOW64 intente escribir cada una de ellas, por ejemplo, cd c: \ windows \ sysWOW64 (si dice El sistema no puede encontrar la ruta especificada, intente con la siguiente) cd c: \ windows \ system32 cd c: \ winnt \ system32 cuando uno de ellos no causa un error, deténgase, ha encontrado el carpeta correcta

ahora necesita registrar las DLL de OLE DB 4.0 escribiendo estos comandos y presionando la tecla de retorno después de cada

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

usuario1089766
fuente
-2

No hay un proveedor de 64 bits para Jet. Si desea admitir múltiples fuentes de base de datos, incluido Jet to Excel, necesitará al menos esa parte de su aplicación para ejecutarse en un proceso de 32 bits.

El error que obtiene cuando compila para x86 es un poco extraño. No puedo ver cómo terminaría haciendo referencia a conjuntos de 64 bits en este caso.

AnthonyWJones
fuente
Anthony, ¿cómo puedo hacer que solo una parte de un proyecto se ejecute en modo de 32 bits? Todas estas conexiones de base de datos, incluido Excel, se incluirán en un solo proyecto. También recibí el error en x86, cuando intento ejecutarlo en el sistema operativo de 64 bits. Creo que esto se debe a que el controlador de DB2 instalado en el sistema operativo de 64 bits es una versión de 64 bits y cuando se hace referencia desde la aplicación, que está configurada para ejecutarse en modo de 32 bits, causa el error.
neo
Si dividir el proyecto en exs multipe es más complicado de lo que vale, solo te queda compilar a 32 bits. En cuanto al problema de DB2, debería buscar algunos expertos de DB2 en esta quizás otra pregunta específica de DB2. Normalmente, cosas como SQL Server instalarán proveedores de 32 bits y 64 bits en una máquina de 64 bits.
AnthonyWJones
Gracias Anthony por tus comentarios. Después de hacer muchas búsquedas sobre este tema y de sus comentarios, lo que entendí es que tengo que crear la parte del proyecto que procesa la hoja de Excel como un proyecto separado y compilarla en la versión de 32 bits.
neo
3
Para que la gente sepa, A2010 tendrá Jet de 64 bits.
David-W-Fenton
Gracias David, 2010 tiene un controlador de 64 bits
neo