Criei um aplicativo Windows desenvolvido no .NET 3.5 em um servidor Windows 2008 de 32 bits. Quando implantado o aplicativo em um servidor de 64 bits, ele mostra o erro "O provedor Microsoft.Jet.OLEDB.4.0 'não está registrado na máquina local".
Portanto, como solução para esse problema, alterei a propriedade build do projeto para X86, para que ele seja compilado no modo de 32 bits e reconstrua o projeto na máquina de 32 bits. Mas, o mesmo projeto usa outros drivers de banco de dados (DB2, SQL etc.) para conectar-se a outros bancos de dados. Portanto, quando implantei meu aplicativo novamente no SO de 64 bits, ele lança a exceção "Tentativa de carregar um assembly de 64 bits em uma plataforma de 32 bits".
Estou usando o driver Microsoft.Jet.OLEDB.4.0 para ler e gravar no Excel (.xls)
Se o problema persistir no ASP.NET, basta alterar a configuração "Ativar aplicativos de 32 bits" para True, nas configurações avançadas do pool de aplicativos.
fonte
Eu tenho o mesmo problema
Apliquei a resposta por neo, mas ela não funcionou até alterar o provedor para "Provider = Microsoft.ACE.OLEDB.12.0;" na cadeia de conexão.
Espero que isso ajude se alguém enfrentar o mesmo problema.
fonte
Eu sei que são perguntas bastante antigas e muitas pessoas responderam. mas estou resumindo as coisas para entender:
Se a extensão do arquivo for xls e o SO for 32 bits, somente você poderá usar "
Microsoft.Jet.OLEDB.4.0
". A Microsoft não lançou a versão de 64 bits deste driver.Se a extensão do arquivo for xlsx ou o SO for 64 bits, você deverá usar "
Microsoft.ACE.OLEDB.12.0
". O aplicativo compilado no modo 32/64 bits não afeta a seleção do driver.Sempre instale o driver de
Microsoft.ACE.OLEDB.12.0
64 bits no SO de 64 bits. Se você já instalou o Office 32 bits, precisará executar o driver do cmd com o argumento / passive. Esse hack funciona até o Office 2013, a Microsoft interrompeu essa solução alternativa do Office 2016 para drivers Microsoft.ACE.OLEDB.16.0.Download de drivers Microsoft.ACE.OLEDB.12.0
Se o Aplicativo for compilado com o sinalizador AnyCPU, ele procurará drivers de acesso de 64 bits no SO de 64 bits e drivers de acesso de 32 bits no SO de 32 bits.
fonte
Tenho a mesma mensagem, tenho uma página da Web no visual studio 2010, leio um arquivo.xls nessa página, no meu projeto visual não tem nenhum problema, quando o coloco no meu local do IIS, lança-me um 'Microsoft .Jet.OLEDB.4.0 'provedor não está registrado na máquina local' , corrigi esse problema na próxima etapa, seguindo estas etapas,
1.-Abra o IIS
2.-Altere o appPool em Configurações avançadas
3.-true para ativar o aplicativo de 32 bits.
e isso é tudo
ps.I alterei o Configuration Manager para X86 na Active Solution Platform
fonte
Se seu aplicativo for executado no localIIS, você poderá resolver esse problema ativando aplicativos de 32 bits nas Configurações avançadas do AppPool
fonte
Eu tive o mesmo problema. Mudei a configuração do aplicativo para
x86
, então funcionou!fonte
Acabei de alterar minha propriedade do projeto para o formato x64
Projeto ---> Propriedades ---> Construção ---> Target Framework ---> X64
fonte
Nós encontramos esse problema no aplicativo de desktop.
Ambiente de desenvolvimento: Windows 7 Ultimate - Provedor de .NET Framework 4.5 de 64 bits = Microsoft.Jet.OLEDB.4.0
Foi resolvido alterando o destino da plataforma para X86 de qualquer CPU. Propriedades do projeto >> Compilar >> Destino da plataforma.
fonte
Eu deparei com esse problema com meu aplicativo da área de trabalho (o provedor 'Microsoft.Jet.OLEDB.4.0' não está registrado na máquina local). Não tive a opção de criar como um aplicativo de 32 bits. Esperando que isso ajude outros na mesma situação.
Fiz o seguinte e o problema foi resolvido:
Instalou a versão de 64 bits do Microsoft Access Database Engine 2010 redistribuível , conforme sugerido por neo
Alterei meu provedor para Microsoft.ACE.OLEDB.12.0
fonte
Embora uma solução mais ideal seja recompilar simplesmente como sugerido acima, isso requer acesso ao código-fonte. No meu caso, eu só tinha o .exe finalizado e tive que usar esta solução. Ele usa a
CorFlags.exe
partir do .Net SDK para alterar as características de carregamento do aplicativo.CorLibs.exe
, então verifique as Ferramentas de Desenvolvimento do Windows .CorFlags.exe
. Para minha instalação do .Net Framework 3.5 SDK, estava emC:\Program Files\Microsoft SDKs\Windows\v7.0\Bin
.path/to/CorFlags.exe path/to/your/exeFile.exe /32Bit+
.Você Terminou! Isso define os sinalizadores iniciais do seu programa para que ele inicie no modo WOW64 de 32 bits e, portanto, possa acessar o microsoft.jet.oledb.4.0.
fonte
Altere as configurações avançadas do pool de aplicativos Configurações do IIS.
fonte
Basta alterar a propriedade com base na sua máquina e todos fizeram :-)
Projeto ---> Propriedades ---> Construção ---> Target Framework ---> X64
ou
Projeto ---> Propriedades ---> Compilação ---> Target Framework ---> X86
fonte
Mudei minha cadeia de conexão de
var myConnectionString = string.Format ("Provedor = Microsoft.Jet.OLEDB.4.0; Fonte de dados = {0}; Persistir informações de segurança = True; Jet OLEDB: Senha do banco de dados =;", gisdbPath);
para isso:
var myConnectionString = string.Format ("Provedor = Microsoft.Jet.OLEDB.4.0; Mode = compartilhamento negar nenhum; Fonte de dados = {0}; ID do usuário = Admin; senha =;", gisdbPath);
Funciona para mim nunca solicitou o registro do Microsoft.Jet.OLEDB.4.0 '.
fonte
De fato, não existe uma versão de 64 bits do Jet - e nenhum plano (aparentemente) para produzir uma.
Você pode usar o driver do ACE de 64 bits: http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=23734
No entanto, você pode mudar o projeto para 32 bits na versão Express (não tentei e não tenho mais o 2008 instalado)
Talvez seja hora de descartar completamente os bancos de dados do Access, morder a bala e optar pelo SQL Server?
fonte
Estou usando o VS2013 para Winforms, a solução abaixo funcionou para mim.
Faça o download: http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=23734
Em seguida, defina VS Target Platform como x86.
fonte
Nas versões mais antigas do IIS, você não encontrará
Advance Settings
isso para permitir queEnable 32-bit Applications
você execute os seguintes comandos:cscript% SYSTEMDRIVE% \ inetpub \ adminscripts \ adsutil.vbs SET W3SVC / AppPools / Enable32bitAppOnWin64 1
e
% SYSTEMROOT% \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_regiis.exe -i
Referência: Aqui
fonte
Eu estava recebendo a mesma exceção ao executar o "SQL Server 2014 Import and Export Data (64 bits)" no meu Windows 8.1.
Para corrigir o problema, fiz o seguinte
iniciou o SQL Server 2014 Import and Export Data (32 bits) em vez de 64 bits e está funcionando para mim. Não alterei nenhuma configuração do IIS e não instalei nenhum software extra.
fonte
Sei que tenho esse problema repetidamente quando implanto meu aplicativo em um novo servidor porque estou usando esse driver para conectar-me a um arquivo do Excel. Então aqui está o que estou fazendo ultimamente.
Há um Windows Server 2008 R2, eu instalo os drivers do Access para uma máquina de x64 bits e me livrei dessa mensagem, o que me deixa muito feliz em encontrar outra.
Este aqui abaixo funciona esplendidamente na minha máquina de desenvolvimento, mas no servidor me dá um erro mesmo após a instalação dos drivers ODBC mais recentes, que eu acho que esse é o problema, mas foi assim que resolvi.
Eu substituo pelo novo provedor como este abaixo:
Mas enquanto faço isso, há uma coisa que você deve notar. O uso da extensão de arquivo .xlsx e a versão do Excel é 12.0.
Depois de entrar nessa mensagem de erro Erro: "Não foi possível encontrar o ISAM instalável" , decido alterar as coisas um pouco como abaixo:
e sim, eu terminei com essa coisa desagradável, mas aqui recebi outra mensagem O mecanismo de banco de dados do Microsoft Access não pode abrir ou gravar no arquivo 'time_zone'. Ele já foi aberto exclusivamente por outro usuário ou você precisa de permissão para visualizar e gravar seus dados. o que me diz que não estou longe de resolvê-lo.
Talvez exista outro processo que abriu o arquivo e tudo o que preciso fazer é reiniciar e tudo começará a funcionar normalmente, conforme o esperado.
fonte
vá para Iniciar-> Executar e digite cmd isto inicia o prompt de comando (também disponível em Iniciar-> Programas-> Acessórios-> Prompt de comando)
digite cd .. e pressione Enter digite cd .. e pressione Enter novamente (continue fazendo isso até que o prompt mostre:>)
agora você precisa ir para uma pasta especial que pode ser c: \ windows \ system32 ou pode ser c: \ winnt \ system32 ou pode ser c: \ windows \ sysWOW64 tente digitar cada uma delas, por exemplo, cd c: \ windows \ sysWOW64 (se o sistema não encontrar o caminho especificado, tente o próximo) cd c: \ windows \ system32 cd c: \ winnt \ system32 quando um deles não causar erro, pare, você encontrou o pasta correta.
agora você precisa registrar as DLLs do OLE DB 4.0 digitando esses comandos e pressionando return após cada
regsvr32 Msjetoledb40.dll regsvr32 Msjet40.dll regsvr32 Mswstr10.dll regsvr32 Msjter40.dll regsvr32 Msjint40.dll
fonte
Não há um provedor de 64 bits para o Jet. Se você deseja oferecer suporte a várias fontes de banco de dados, incluindo o Jet to Excel, precisará de pelo menos essa parte do seu aplicativo para executar em um processo de 32 bits.
O erro que você está recebendo ao compilar para x86 é um pouco estranho. Não vejo como você acabaria referenciando assemblies de 64 bits nesse caso.
fonte