Поставщик Microsoft.Jet.OLEDB.4.0 не зарегистрирован на локальной машине

Я создал приложение Windows, разработанное в .NET 3.5 на 32-битном сервере Windows 2008. При развертывании приложения на 64-битном сервере он показывает ошибку "поставщик Microsoft.Jet.OLEDB.4.0" не зарегистрирован на локальном компьютере ".

Итак, как решение этой проблемы, я изменил свойство build проекта на X86, так что он будет строить в 32-битном режиме и перестроить проект на 32-битной машине. Но в том же проекте используются другие драйверы DB (DB2, SQL и т.д.) Для подключения к другим базам данных. Поэтому, когда я снова развернул свое приложение в 64-битной ОС, он выдает исключение "Попытка загрузить 64-разрядную сборку на 32-битной платформе".

Я использую драйвер Microsoft.Jet.OLEDB.4.0 для чтения и записи в Excel (.xls)

Ответ 1

Я нашел решение этой проблемы. Проблема, которую я описал в моем вопросе, возникла в основном из-за несовместимости драйвера Microsoft.Jet.OLEDB.4.0 в 64-разрядной ОС.

Итак, если мы используем драйвер Microsoft.Jet.OLEDB.4.0 на 64-битном сервере, нам нужно заставить наше приложение встраиваться в 32-битный режим (это ответ, который я нашел, когда я сделал обширный поиск этого известная проблема), и это приводит к поломке другой части моего кода.

К счастью, теперь Microsoft выпустила 64-разрядный совместимый 2010 System System Driver, который можно использовать в качестве замены традиционного драйвера Microsoft.Jet.OLEDB.4.0. Он работает как на 32-битных, так и на 64-битных серверах. Я использовал его для обработки файлов Excel, и он отлично работал у меня в обеих средах. Но этот драйвер находится в BETA.

Вы можете загрузить этот драйвер из Распространяемый Microsoft Access Database Engine 2010

Ответ 2

Если проблема сохраняется в ASP.NET, все, что мне нужно было сделать, это изменить параметр "Включить 32-разрядные приложения" на "Истина" в "Дополнительные параметры для пула приложений".

Ответ 3

У меня та же проблема

Поставщик Microsoft.Jet.OLEDB.4.0 'не зарегистрирован на локальном машина

Я применил ответ neo, но это не сработало, пока я не заменил провайдера на "Provider = Microsoft.ACE.OLEDB.12.0;" в строке подключения.

Надеюсь, это поможет, если кто-то столкнется с той же проблемой.

Ответ 4

Я знаю это довольно старые вопросы и многие люди ответили. но я суммирую вещи для понимания:

Если расширение файла - xls, а ОС - 32-битная, то только вы можете использовать " Microsoft.Jet.OLEDB.4.0 ". Microsoft не выпустила 64-битную версию этого драйвера.

Если расширение файла xlsx или ОС является 64-битной, вам необходимо использовать " Microsoft.ACE.OLEDB.12.0 ". Приложение, скомпилированное в 32/64 битном режиме, не влияет на выбор драйвера.

Всегда устанавливайте 64-битный драйвер Microsoft.ACE.OLEDB.12.0 в 64-битной ОС. Если вы уже установили Office 32 bit, вам нужно запустить драйвер из cmd с аргументом /passive. Этот хак работает только до Office 2013, Microsoft прекратила этот обходной путь из Office 2016 для драйверов Microsoft.ACE.OLEDB.16.0.

AccessDatabaseEngine_x64.exe /passive

Скачать драйверы 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\"";
}

Если приложение скомпилировано с флагом AnyCPU, оно будет искать 64-разрядные драйверы доступа в 64-разрядной ОС и 32-разрядные драйверы доступа в 32-разрядной ОС.

Ответ 5

У меня есть одно и то же сообщение, у меня есть веб-страница с do на visual studio 2010, я прочитал файл .xls на этой странице, в моем визуальном проекте нет никаких проблем, когда я помещаю его в локальную локальную локацию IIS поставщик 'Microsoft.Jet.OLEDB.4.0' не зарегистрирован на локальном компьютере , Я исправил эту проблему следующим образом:

1. -Открыть IIS
2. - Измените appPool на Дополнительные параметры
3.-true для включить 32-битное приложение.

и что все

ps.I изменил Configuration Manager на X86 на платформе активных решений

Ответ 6

Если ваше приложение работает на localIIS, вы можете решить эту проблему с помощью включения 32-разрядных приложений в AppPool Дополнительные параметры

введите описание изображения здесь

Ответ 7

У меня была такая же проблема. Я изменил конфигурацию приложения на x86, тогда он сработает!

Ответ 8

Я просто изменил свое свойство проекта в формате x64

Проект --- > Свойства --- > Сборка --- > Целевая структура --- > X64

Ответ 9

Мы столкнулись с этой проблемой в настольном приложении.

Окружение Dev: Windows 7 Ultimate - 64 бит .Net Framework 4.5 Provider = Microsoft.Jet.OLEDB.4.0

Это было решено путем изменения целевой платформы платформы X86 с любого процессора. Свойства проекта → Сборка → Цель платформы.

введите описание изображения здесь

Ответ 10

Я столкнулся с этой проблемой с моим настольным приложением (поставщик Microsoft.Jet.OLEDB.4.0 не зарегистрирован на локальном компьютере). У меня не было возможности создавать 32-разрядное приложение. Надеясь, что это поможет другим в той же ситуации.

Я сделал следующее, и проблема исчезла:

Ответ 11

Хотя более оптимальным решением является просто перекомпилировать, как было предложено выше, для этого требуется доступ к исходному коду. В моем случае у меня был только готовый .exe, и мне пришлось использовать это решение. Он использует CorFlags.exe из .Net SDK для изменения характеристик загрузки приложения.

  • Загрузите SDK.Net Framework (я лично использовал 3.5, но используемая версия должна быть на уровне или выше требуемого .Net для вашего приложение.
  • При установке все, что вам нужно, это CorLibs.exe, поэтому просто установите средства разработки Windows.
  • После установки найдите CorFlags.exe. Для моей установки SDK.NET Framework 3.5 это было в C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin.
  • Откройте командную строку и введите path/to/CorFlags.exe path/to/your/exeFile.exe /32Bit+.

Вы закончили! Это устанавливает начальные флаги для вашей программы, чтобы она начиналась в 32-битном режиме WOW64 и поэтому могла получить доступ к microsoft.jet.oledb.4.0.

Ответ 12

Изменения в дополнительных настройках пула приложений IIS. Необходимое 32-разрядное приложение

Ответ 13

Просто измените свойство на основе вашей машины, и все сделали: -)

Проект --- > Свойства --- > Сборка --- > Целевая структура --- > X64

или

Проект --- > Свойства --- > Строить --- > Целевая структура --- > X86

Ответ 14

Я изменил строку подключения из

var myConnectionString = string.Format( "Provider = Microsoft.Jet.OLEDB.4.0; Источник данных = {0}; Persist Security Info = True; Jet OLEDB: Database Password =;", gisdbPath);

:

var myConnectionString = string.Format( "Provider = Microsoft.Jet.OLEDB.4.0; Mode = Share Deny None; Источник данных = {0}; идентификатор пользователя = Admin; пароль =;", gisdbPath);

Это работает, я никогда не просил зарегистрировать Microsoft.Jet.OLEDB.4.0.

Ответ 15

На самом деле нет 64-битной версии Jet - и никаких планов (по-видимому) для ее создания.

Возможно, вы сможете использовать 64-битный драйвер ACE: http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=23734

  • но я понятия не имею, как это будет работать, если вам нужно вернуться в Jet для своих 32-битных приложений.

Однако вы можете переключить проект на 32-разрядный в версии Express (я еще не пробовал и не имел 2008, установленного в любом вкусе)

Возможно, пришло время отказаться от баз данных доступа, укусить пулю и вместо этого перейти на SQL-сервер?

Ответ 17

В более старых версиях IIS вы не найдете Advance Settings, поэтому для включения Enable 32-bit Applications вам необходимо выполнить следующие команды:

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

и

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

Ссылка: Здесь

Ответ 18

Я получал такое же исключение во время запуска "Импорт и экспорт данных SQL Server 2014 (64-разрядный)" на моем Windows 8.1.

Чтобы устранить эту проблему, я сделал следующее

запустил SQL Server 2014 Импорт и экспорт данных (32-разрядный) вместо 64-разрядного, и он работает для меня. Я не изменил настройки IIS и не установил никакого дополнительного программного обеспечения.

Ответ 19

Я знаю, что эта проблема возникает снова и снова при развертывании приложения на новом сервере, потому что я использую этот драйвер для подключения к файлу Excel. Итак, вот что я делаю в последнее время.

Там Windows Server 2008 R2, я устанавливаю драйверы доступа для 64-разрядной машины, и я избавляюсь от этого сообщения, что делает меня очень счастливым только для того, чтобы столкнуться с другим.

Ниже приведено подробное описание работы с моей машиной dev, но на сервере возникает ошибка даже после установки последних драйверов ODBC, которые, я думаю, это проблема, но именно так я ее и решил.

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

Я заменяю новый поставщик следующим образом:

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

Но, как я это делаю, есть одна вещь, которую вы должны заметить. Использование расширения .xlsx и версии Excel - 12.0.

После того, как я попал в это сообщение об ошибке Ошибка: "Не удалось найти Installable ISAM" , я решил изменить некоторые вещи, как показано ниже:

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

и да, я закончил эту неприятную вещь, но здесь я получил еще одно сообщение Механизм базы данных Microsoft Access не может открыть или записать в файл "time_zone". Он уже открыт исключительно другим пользователем, или вам нужно разрешение на просмотр и запись его данных., который говорит мне, что я не далеко от его решения.

Может быть, есть другой процесс, который открыл файл тем временем, и все, что мне нужно сделать, это перезагрузка, и все начнется плавно, как и ожидалось.

Ответ 20

перейдите к Start-> Run и введите cmd, чтобы запустить командную строку (также доступно из Start-> Программы → Accessories-> Командная строка)

введите cd.. и нажмите return, введите cd.. и нажмите return снова (продолжайте делать это, пока в командной строке не появится:>)

Теперь вам нужно перейти в специальную папку, которая может быть c:\windows\system32, или это может быть c:\winnt\system32, или это может быть c:\windows\sysWOW64, попробуйте набрать каждый из них, например, cd c:\windows\sysWOW64 (если он говорит, что система не может найти указанный путь, попробуйте следующий) cd c:\windows\system32 cd c:\winnt\system32, когда один из них не вызывает ошибку, остановитесь, вы нашли правильная папка.

Теперь вам нужно зарегистрировать библиотеки OLE DB 4.0, набрав эти команды и нажимая клавишу возврата после каждого

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

Ответ 21

Для Jet нет 64-битного провайдера. Если вы хотите поддерживать несколько источников базы данных, включая Jet для Excel, вам понадобится хотя бы эта часть вашего приложения для выполнения 32-разрядного процесса.

Ошибка, возникающая при компиляции для x86, немного странная. Я не вижу, как вы в конечном итоге ссылаетесь на 64-битные сборки в этом случае.

Ответ 22

Самое простое решение - перейти в "Свойства проекта" и установить цель сборки для x86 из любого ЦП.