私は、.NET 3.5で開発されたWindowsアプリケーションを32ビットWindows 2008サーバーで作成しました。アプリケーションを64ビットサーバーにデプロイすると、 "Microsoft.Jet.OLEDB.4.0 'プロバイダーはローカルコンピューターに登録されていません"というエラーが表示されます。
そのため、この問題の解決策として、32ビットモードでビルドし、32ビットマシンでプロジェクトを再ビルドするように、プロジェクトのbuildプロパティをX86に変更しました。しかし、同じプロジェクトは他のデータベースへの接続に他のDBドライバ(DB2、SQLなど)を使用します。だから私は再び64ビットOSに私のアプリをデプロイしたとき、それは例外「32ビットプラットフォーム上で64ビットアセンブリをロードしようとしました」を投げます。
Microsoft(.xls)への読み書きにMicrosoft.Jet.OLEDB.4.0ドライバを使用しています
私はこの問題に対する解決策を見つけました。私の質問で説明した問題は、基本的に64ビットOSにおけるMicrosoft.Jet.OLEDB.4.0ドライバの非互換性が原因で発生しました。
したがって、64ビットサーバーでMicrosoft.Jet.OLEDB.4.0ドライバを使用している場合は、アプリケーションを32ビットモードでビルドするように強制する必要があります(これは、これを徹底的に検索したときの答えです既知の問題)、それが原因でコードの他の部分が壊れます。
幸いなことに、マイクロソフトは現在64ビット互換2010 Office System Driverをリリースしました。伝統的なMicrosoft.Jet.OLEDB.4.0ドライバ用。 32ビットサーバーと64ビットサーバーの両方で機能します。私はこれをExcelファイルの操作に使用しましたが、どちらの環境でも問題なく動作しました。 しかし、このドライバはBETAにあります。
あなたはからこのドライバをダウンロードすることができます Microsoft Accessデータベースエンジン2010再配布可能
ASP.NETで問題が解決しない場合は、アプリケーションプールの詳細設定で[32ビットアプリケーションを有効にする]設定を[True]に変更するだけでした。
私は同じ問題を抱えています
Microsoft.Jet.OLEDB.4.0 'プロバイダーはローカルコンピューターに登録されていません
回答をneoで適用しましたが、接続文字列でプロバイダを“ Provider = Microsoft.ACE.OLEDB.12.0;”に変更するまで機能しませんでした。
誰かが同じ問題に直面したときにこれが役立つことを願っています。
私はそれがかなり古い質問であることを知っています、そして多くの人が答えました。しかし、私は理解のために物事をまとめています:
ファイル拡張子がxlsで、OSが32ビットであれば、あなただけが "Microsoft.Jet.OLEDB.4.0
"を使うことができます。マイクロソフトはこのドライバの64ビット版をリリースしていません。
ファイル拡張子がxlsxまたはOSが64ビットの場合は、「Microsoft.ACE.OLEDB.12.0
」を使用する必要があります。 32/64ビットモードでコンパイルされたアプリケーションは、ドライバの選択に影響を与えません。
常に64ビットドライバのMicrosoft.ACE.OLEDB.12.0
をOS 64ビットにインストールしてください。既にOffice 32ビットをインストールしている場合は、/ passive引数を付けてcmdからドライバを実行する必要があります。このハッキングはOffice 2013までしか機能しません。MicrosoftはOffice 2016 for Microsoft.ACE.OLEDB.16.0ドライバ用のこの回避策を中止しました。
AccessDatabaseEngine_x64.exe /passive
ダウンロードドライバMicrosoft.ACE.OLEDB.12.
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ビットOS上の64ビットアクセスドライバと32ビットOS上の32ビットアクセスドライバを探します。
私は同じメッセージを持っています、私はビジュアルスタジオ2010でdoを持っているウェブページを持っています、私は私のプロジェクトで私はそれを私のIISに置いても問題ありませんfile.xlsを読みますローカル私を投げる'Microsoft.Jet.OLEDB.4.0'プロバイダーはローカルマシンに登録されていません '、私はこのステップに続いて次の問題を修正しました、
1.オープンIIS
2.-appPoolをonに変更します。 高度な設定
3.真実 32ビットアプリケーションを有効にします。
そしてそれがすべて
アクティブソリューションプラットフォームでConfiguration ManagerをX86に変更しました。
私は同じ問題を抱えていました。アプリケーションの設定をx86
に変更したところ、うまくいきました。
私は自分のプロジェクトのプロパティをx64フォーマットに変更しました
プロジェクト--->プロパティ--->ビルド--->ターゲットフレームワーク---> X64
デスクトップアプリケーションでこの問題に遭遇しました( 'Microsoft.Jet.OLEDB.4.0'プロバイダーはローカルコンピューターに登録されていません)。 32ビットアプリとしてビルドするオプションはありませんでした。これが同じ状況で他の人たちに役立つことを願っています。
私は以下をしました、そして、問題は消えました:
64ビットバージョンの Microsoft Accessデータベースエンジン2010再配布可能 をインストールしました。これは、neoが推奨しています。
プロバイダをMicrosoft.ACE.OLEDB.12.0に変更しました
より最適な解決策は上記のように単純に再コンパイルすることですが、それにはソースコードへのアクセスが必要です。私の場合は、完成した.exeだけがあり、このソリューションを使用する必要がありました。アプリケーションのロード特性を変更するために、.NET SDKのCorFlags.exe
を使用します。
CorLibs.exe
だけなので、Windows開発ツールをチェックしてください。CorFlags.exe
を見つけてください。私の.NET Framework 3.5 SDKのインストールでは、それは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にアクセスできるようになります。
接続文字列をからに変更しました
var myConnectionString = string.Format( "プロバイダ= Microsoft.Jet.OLEDB.4.0;データソース= {0};永続セキュリティ情報= True; Jet OLEDB:データベースパスワード=;"; gisdbPath);
これに:
var myConnectionString = string.Format( "Provider = Microsoft.Jet.OLEDB.4.0; Mode = Share Deny None;データソース= {0};ユーザーID = Admin;パスワード=;"; gisdbPath);
Microsoft.Jet.OLEDB.4.0の登録を要求されたことがない場合でも、うまくいきます。
あなたのマシンに基づいてプロパティを変更するだけですべてが完了しました:-)
プロジェクト--->プロパティ--->ビルド--->ターゲットフレームワーク---> X64
または
プロジェクト--->プロパティ--->ビルド--->ターゲットフレームワーク---> X86
IIS設定アプリケーションプールの詳細設定の変更。有効な32ビットアプリケーション
[スタート] - > [ファイル名を指定して実行]をクリックし、cmdと入力してコマンドプロンプトを起動します([スタート] - > [プログラム] - > [アクセサリ] - > [コマンドプロンプト]からも利用できます)。
cd ..と入力してReturnキーを押し、もう一度Returnキーを押します(プロンプトが表示されるまでこれを続けます:>)。
c:\ windows\system32、c:\ winnt\system32、c:\ windows\sysWOW64などの特別なフォルダに移動します。cd c:\ windows\sysWOW64(システムが指定されたパスを見つけられない場合は、次のパスを試してください)cd c:\ windows\system32 cd c:\ winnt\system32これらのいずれかがエラーにならない場合は、停止正しいフォルダ.
これらのコマンドを入力してreturnキーを押すことで、OLE DB 4.0 DLLを登録する必要があります。
regsvr32 Msjetoledb40.dll regsvr32 Msjet40.dll regsvr32 Mswstr10.dll regsvr32 Msjter40.dll regsvr32 Msjint40.dll
Windows 8.1で "SQL Server 2014のインポートとエクスポートのデータ(64ビット)"を実行中に同じ例外が発生しました。
この問題を解決するために、私は以下を行いました
64ビットではなく32ビットのSQL Server 2014のインポートとエクスポートのデータを開始しましたそれは私のために働いています。 IISの設定を変更したり、追加のソフトウェアをインストールしたりしていません。
実際には64ビット版のJetはありません - そして(明らかに)Jetを作成する計画もありません。
ACE 64ビットドライバを使用できる可能性があります。 http://www.Microsoft.com/en-us/download/details.aspx?displaylang=ja&id=23734
ただし、Expressバージョンではプロジェクトを32ビットに切り替えることができる場合があります(私は試したことがなく、2008年以降はインストールされていません)。
Accessデータベースを完全に廃止し、問題を解決して代わりにSQLサーバーにアクセスする時が来たのではないでしょうか。
古いバージョンの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
参考: こちら
私はWinformsにVS2013を使用しています、以下の解決策は私のために働きました。
ダウンロード: http://www.Microsoft.com/en-us/download/details.aspx?displaylang=ja&id=23734
次に、VSターゲットプラットフォームをx86に設定します。
私は私がこのファイルをExcelファイルに接続するのに使っているので私が新しいサーバーに私のアプリケーションをデプロイするとき私がこの問題を何度も持っていることを知っています。だからここで私は最近やっていることです。
Windows Server 2008 R2があります、私はx64ビットマシン用のAccessドライバをインストールします、そして私はこのメッセージを取り除きます。
これは私の開発したマシンでは素晴らしい動作をしますが、サーバでは最新の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です。
このエラーメッセージが表示された後 エラー:「インストール可能な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'を開くことも、ファイルに書き込むこともできません。他のユーザーによって既に排他的に開かれているか、そのデータを表示および書き込みするための許可が必要です。 それは私がそれを解決することから遠くないと私に言う。
その間にファイルを開いたプロセスが他にあるかもしれません。その上で実行する必要があるのは再起動だけで、すべてが期待どおりに円滑に開始されます。