2010-01-02 38 views
167

Ho creato un'applicazione per Windows sviluppata in .NET 3.5 in un server Windows 2008 a 32 bit. Quando viene distribuita l'applicazione in un server a 64 bit, viene visualizzato l'errore "Il provider Microsoft.Jet.OLEDB.4.0" non è registrato sul computer locale ".Il provider Microsoft.Jet.OLEDB.4.0 non è registrato sul computer locale

Quindi, come soluzione a questo problema, ho modificato la proprietà di costruzione del progetto in X86, in modo che venga creata in modalità a 32 bit e ricostruisca il progetto nella macchina a 32 bit. Ma lo stesso progetto utilizza altri driver DB (DB2, SQL ecc.) Per connettersi ad altri database. Quindi, quando ho distribuito la mia app di nuovo nel sistema operativo a 64 bit, genera l'eccezione "Tentativo di caricare un assembly a 64 bit su una piattaforma a 32 bit."

Sto utilizzando il driver Microsoft.Jet.OLEDB.4.0 leggere e scrivere in Excel (.xls)

risposta

212

Ho trovato una soluzione per questo problema. Il problema che ho descritto nella mia domanda si è verificato essenzialmente a causa dell'incompatibilità del driver Microsoft.Jet.OLEDB.4.0 nel sistema operativo a 64 bit.

Quindi, se stiamo utilizzando il driver Microsoft.Jet.OLEDB.4.0 in un server a 64 bit, dobbiamo forzare la nostra applicazione a compilare in modalità a 32 bit (questa è la risposta che ho trovato quando ho fatto una ricerca estesa per questo problema noto e che causa l'interruzione di un'altra parte del mio codice.

Fortunatamente, ora Microsoft ha rilasciato un 64 bit compatibile 2010 driver Office System che può essere utilizzato come sostituto per il conducente Microsoft.Jet.OleDb.4.0 tradizionale. Funziona sia su server a 32 bit che a 64 bit. L'ho usato per la manipolazione dei file di Excel e ha funzionato bene per me in entrambi gli ambienti. Ma questo driver è in BETA.

Se vuoi scaricare questo driver dal Microsoft Access Database Engine 2010 Redistributable

+5

Inoltre presta particolare attenzione alle istruzioni su quel collegamento :) – Mark

+3

Ho avuto lo stesso problema. Ho cambiato la configurazione dell'applicazione in x86, quindi ha funzionato! –

+5

ho anche dovuto modificare la stringa di connessione dall'utilizzo di Microsoft.Jet.OLEDB.4.0 a Microsoft.ACE.OLEDB.12.0 – Spikolynn

-2

Non esiste un provider a 64 bit per Jet. Se si desidera supportare più sorgenti DB, tra cui Jet in Excel, è necessario almeno quella parte dell'applicazione per l'esecuzione in un processo a 32 bit.

L'errore che si ottiene quando si compila x86 è un po 'strano. Non riesco a vedere come si finirebbe per fare riferimento a assembly 64 bit in questo caso.

+0

Anthony, Come posso eseguire solo una parte di un progetto per l'esecuzione in modalità 32 bit? Tutte queste connessioni DB, incluso Excel, rientrano in un unico progetto. Inoltre ho ricevuto l'errore in x86, quando provo a eseguirlo nel sistema operativo a 64 bit. Penso che questo sia dovuto al fatto che il driver DB2 installato nel sistema operativo a 64 bit è una versione a 64 bit e quando viene refferenziato dall'applicazione, che è configurato per l'esecuzione in modalità a 32 bit, causa l'errore. – neo

+0

Se dividere il progetto in multipe exe è più fastidioso del suo valore, si rimane solo con la compilazione a 32 bit. Per quanto riguarda il problema DB2, dovresti cercare alcuni esperti di DB2 su questa forse un'altra domanda specifica per DB2. In genere cose come SQL Server installeranno sia i provider a 32 bit che quelli a 64 bit su una macchina a 64 bit. – AnthonyWJones

+0

Grazie Anthony per i tuoi commenti. Da un sacco di ricerche su questo problema e dai tuoi commenti, quello che ho capito è che devo creare la parte del progetto che elabora il foglio excel come progetto separato e renderlo compilabile nella versione a 32 bit. – neo

105

Se il problema persiste in ASP.NET, Tutto quello che dovevo fare era cambiare il "Attiva applicazioni a 32 bit" su Vero, nelle Impostazioni avanzate per la Pool di applicazioni.

+10

Grazie! Questo lo ha risolto anche per me. – Shirlz

+0

Stavo usando ODBC a 64 bit e questa modifica ha iniziato a darmi errore nel database. L'ho corretto però. Nel caso in cui qualcuno incontri anche questo, dovrai installare i driver ODBC a 32 bit e quindi creare il tuo DSN in quello. –

+1

Ora è possibile farlo completamente con codice a 64 bit. Installa il ridistribuibile collegato in [risposta di neo] (http://stackoverflow.com/a/1992009/33080), quindi utilizza la stringa Provider suggerita in [Iqbal's answer] (http://stackoverflow.com/a/16117432/33080). Quindi invertire entrambe le risposte. Questo è tutto! –

7

Ho avuto lo stesso problema. Ho cambiato la configurazione dell'applicazione in x86, quindi ha funzionato!

+0

come modificare questa configurazione? Ho creato il progetto del tipo di sito web –

18

Ho lo stesso messaggio, ho una pagina web con do su visual studio 2010, ho letto un file.xls su quella pagina, nel mio progetto visual non ha alcun problema, quando l'ho messo sul mio IIS locale me un fornitore 'Microsoft.Jet.OLEDB.4.0' non è registrato sulla macchina locale' , ho risolto il problema successivo questa procedura,

1.-Open IIS
2.-Change l'appPool su Impostazioni avanzate
3.-true su abilitare all'applicazione a 32 bit.

e questo è tutto

ps.I cambiato Configuration Manager per X86 sulla piattaforma soluzione attiva

+0

Questo è il giusto per il problema. Ha funzionato per me. Grazie. – Raaghav

+0

Questo impone l'esecuzione della tua app in modalità a 32 bit. Hai bisogno di questa impostazione se vuoi essere in grado di evitare la barriera da 4 GB. – Brain2000

6

Ho appena cambiato la mia proprietà di progetto in formato x64

progetto --- ---> Proprietà > Costruire ---> framework di destinazione ---> X64

+2

Immagino tu intendessi x86 ... – knocte

40

ho lo stesso problema

Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine

Ho applicato la risposta per neo ma non ha funzionato finché non ho cambiato il provider in "Provider = Microsoft.ACE.OLEDB.12.0;" nella stringa di connessione.

Spero che questo aiuti se qualcuno si trova ad affrontare lo stesso problema.

+2

Questo è tutto! Per un server a 64 bit, installare [ridistribuibile] (http://www.microsoft.com/en-us/download/details.aspx?id=13255) collegato da neo (la variante a 64 bit, ovviamente), e quindi cambia il provider come specificato in questa risposta, quindi funzionerà. –

+0

Hai ragione romkyns. Ho già detto che ho applicato la soluzione neo, quindi cambia il provider. Ma grazie il tuo commento lo rende più chiaro. Grazie mille rombi rossi – Iqbal

+0

sostituito Microsoft.Jet.OLEDB.4.0 con Microsoft.ACE.OLEDB.12.0; in app.config e tutto ha funzionato. – AVEbrahimi

1

Variazione pool di applicazioni IIS Impostazioni avanzata settings.Enable applicazione a 32 bit

0

C'è infatti nessuna versione a 64 bit di Jet - e non prevede (apparentemente) per la produzione di uno.

Potreste essere in grado di utilizzare il driver po 'ACE 64: http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=23734

  • ma non ho idea di come dovrebbe funzionare, se avete bisogno di tornare a Jet per le tue applicazioni a 32 bit.

Tuttavia, si può essere in grado di passare il progetto alla 32bit nella versione Express (non ho provato e non si dispone di 2008 installato in qualsiasi sapore più)

Forse è il momento di rottamare database di Access del tutto, stringere i denti e andare per SQL Server, invece?

1

Basta modificare la proprietà basata sulla vostra macchina e tutti hanno fatto :-)

Progetto ---> Proprietà ---> Crea ---> Target Framework ---> X64

o

Progetto ---> Proprietà ---> Crea ---> target Framework ---> X86

0

Nelle versioni precedenti di IIS, non troverete Advance Settings modo per consentire Enable 32-bit Applications avete t o eseguire i seguenti comandi:

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

e

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

Riferimento: Here

0

mi è stato sempre lo stesso exce ption durante l'esecuzione di "SQL Server 2014 Import and Export Data (64-bit)" sul mio Windows 8.1.

per risolvere il problema questo problema ho fatto la seguente

iniziato SQL Server 2014 Importazione ed esportazione dei dati (32-bit) invece che a 64 bit e si sta lavorando per me. Non ho cambiato alcuna impostazione di IIS e non ho installato alcun software aggiuntivo.

0

So che ho questo problema più e più volte quando distribuisco la mia applicazione su un nuovo server perché sto usando questo driver per connettersi a un file Excel. Quindi ecco cosa sto facendo ultimamente.

C'è un Windows Server 2008 R2, installo i driver di accesso per una macchina x64 bit e mi libero di questo messaggio, il che mi rende molto felice solo per imbatterci in un'altra.

Questo qui sotto funziona splendidamente sulla mia macchina di sviluppo ma sul server mi dà un errore anche dopo aver installato i driver ODBC più recenti, il che penso sia questo il problema, ma questo è il modo in cui l'ho risolto.

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

sostituisco con il nuovo fornitore come questo qui sotto:

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

Ma come faccio questo, c'è una cosa che si dovrebbe notare. Utilizzando l'estensione del file .xlsx e la versione di Excel è 12.0.

Dopo mi trovo in questo messaggio di errore di errore: "Impossibile trovare ISAM installabile", decido di cambiare le cose un po 'come di seguito:

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

e sì, ho finito con quella cosa brutta, ma qui ho ricevuto un altro messaggio Il motore di database di Microsoft Access non può aprire o scrivere sul file 'time_zone'. È già aperto esclusivamente da un altro utente, o è necessaria l'autorizzazione per visualizzare e scrivere i suoi dati. che mi dice che non sono lontano dal risolverlo.

Forse c'è un altro processo che ha aperto il file nel frattempo e tutto ciò che devo fare è un riavvio e tutto inizierà in modo fluido come previsto.

1

Ho riscontrato questo problema con la mia applicazione desktop (il provider "Microsoft.Jet.OLEDB.4.0" non è registrato sul computer locale). Non ho avuto la possibilità di creare un'app a 32 bit. Sperando che questo aiuti gli altri nella stessa situazione.

ho fatto quanto segue e il problema è andato via:

  1. installata la versione a 64 bit di Microsoft Access Database Engine 2010 Redistributable, come suggerito dal neo

  2. Modificato il mio fornitore di Microsoft.ACE.OLEDB.12.0

13

So che sono domande piuttosto vecchie e molte persone hanno risposto. ma sto riassumendo le cose per capire:

Se l'estensione del file è xls e il sistema operativo è a 32 bit, solo tu puoi usare "Microsoft.Jet.OLEDB.4.0". Microsoft non ha rilasciato la versione a 64 bit di questo driver.

Se l'estensione del file è xlsx o il sistema operativo è 64 bit, è necessario utilizzare "Microsoft.ACE.OLEDB.12.0". L'applicazione compilata in modalità 32/64 bit non influisce sulla selezione del driver.

Installare sempre il driver a 64 bit di Microsoft.ACE.OLEDB.12.0 su OS 64 bit. Se hai già installato Office 32 bit, devi eseguire il driver da cmd con/passive.

AccessDatabaseEngine_x64.exe /passive 

Download drivers 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\""; 
} 
+0

Grazie per la risposta, tuttavia, sto utilizzando VS2015 su Windows 10 e utilizzando X64. Quando ho cambiato la configurazione del progetto da AnyCPU a X86, il problema è andato via. Non ho dovuto installare alcun driver aggiuntivo. – NoChance

+0

@NoChance Penso che tu abbia già installato Office 64 bit sul tuo computer e che già contenga driver Microsoft.ACE.OLEDB.12.0. –

+0

Thx per la tua risposta, ho solo ufficio 2007. – NoChance

1

Ho cambiato la mia stringa di connessione da

var = myConnectionString string.Format ("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = {0} Persist Security Info = True; Jet OLEDB: Database Password =; ", gisdbPath);

a questo:

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

Funziona senza richiesta per Microsoft.Jet.OLEDB.4.0'registrato.

-2

La soluzione più semplice è entrare nelle proprietà del progetto e impostare il target di compilazione su x86 da qualsiasi CPU.

+1

Questa risposta potrebbe essere downvoted in quanto ripete la risposta di Kakopappa da * quattro anni fa *. –

10

Se l'applicazione gira su localIIS, è possibile risolvere questo problema consentendo applicazioni a 32 bit in Impostazioni avanzate del AppPool

enter image description here

1

Abbiamo incontrato questo problema in un'applicazione desktop.

Dev Ambiente: Windows 7 Ultimate - 64 bit Net Framework 4.5 Provider = Microsoft.Jet.OLEDB.4.0

E 'stato risolto cambiando bersaglio Platform per X86 da qualsiasi CPU. Proprietà progetto >> Build >> Target piattaforma.

enter image description here

0

Sebbene una soluzione più ottimale è ricompilare semplicemente come suggerito sopra, che richiede l'accesso al codice sorgente. Nel mio caso, avevo solo l'exe finito e dovevo usare questa soluzione. Utilizza CorFlags.exe da .Net SDK per modificare le caratteristiche di caricamento dell'applicazione.

  1. scaricare .NET Framework SDK (io personalmente usato 3.5, ma la versione utilizzata dovrebbe essere pari o superiore alla richiesta Net per la vostra applicazione.
  2. Durante l'installazione, è sufficiente disporre di CorLibs.exe, quindi basta controllare di sviluppo di Windows Strumenti.
  3. Dopo l'installazione, trova le CorFlags.exe. Per la mia installazione di .Net Framework 3.5 SDK, è stato a C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin.
  4. Aprire un prompt dei comandi e digitare path/to/CorFlags.exe path/to/your/exeFile.exe /32Bit+.

Il gioco è fatto! Ciò imposta i flag di avvio per il programma in modo che inizi nella modalità WOW64 a 32 bit e possa quindi accedere a microsoft.jet.oledb.4.0.

Problemi correlati