Я создал приложение 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-сервер?
Ответ 16
Я использую VS2013 для Winforms, ниже для меня работало.
Ответ 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 из любого ЦП.