web-dev-qa-db-ja.com

Microsoft.Jet.OLEDB.4.0 'プロパティはローカルコンピュータに登録されていません

私は、.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ドライバを使用しています

180
neo

私はこの問題に対する解決策を見つけました。私の質問で説明した問題は、基本的に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再配布可能

227
neo

ASP.NETで問題が解決しない場合は、アプリケーションプールの詳細設定で[32ビットアプリケーションを有効にする]設定を[True]に変更するだけでした。

109
Jason Wicker

私は同じ問題を抱えています

Microsoft.Jet.OLEDB.4.0 'プロバイダーはローカルコンピューターに登録されていません

回答をneoで適用しましたが、接続文字列でプロバイダを“ Provider = Microsoft.ACE.OLEDB.12.0;”に変更するまで機能しませんでした。

誰かが同じ問題に直面したときにこれが役立つことを願っています。

45
Iqbal

私はそれがかなり古い質問であることを知っています、そして多くの人が答えました。しかし、私は理解のために物事をまとめています:

ファイル拡張子が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ビットアクセスドライバを探します。

21

私は同じメッセージを持っています、私はビジュアルスタジオ2010でdoを持っているウェブページを持っています、私は私のプロジェクトで私はそれを私のIISに置いても問題ありませんfile.xlsを読みますローカル私を投げる'Microsoft.Jet.OLEDB.4.0'プロバイダーはローカルマシンに登録されていません '、私はこのステップに続いて次の問題を修正しました、

1.オープンIIS
2.-appPoolをonに変更します。 高度な設定
3.真実 32ビットアプリケーションを有効にします。

そしてそれがすべて

アクティブソリューションプラットフォームでConfiguration ManagerをX86に変更しました。

19
leo

アプリケーションがlocalIIS上で動作する場合、この問題を解決するには、AppPoolの2ビットアプリケーションを有効にするを使用します。Advanced Settings

enter image description here

17
Mumin Ka

私は同じ問題を抱えていました。アプリケーションの設定をx86に変更したところ、うまくいきました。

8
Kakopappa

私は自分のプロジェクトのプロパティをx64フォーマットに変更しました

プロジェクト--->プロパティ--->ビルド--->ターゲットフレームワーク---> X64

7
Muhamed Shafeeq

デスクトップアプリでこの問題に遭遇しました。

開発環境:Windows 7 Ultimate - 64ビット.NET Framework 4.5 Provider = Microsoft.Jet.OLEDB.4.0

PlatformのターゲットをAny CPUからX86に変更することで解決しました。プロジェクトのプロパティ>>ビルド>>プラットフォームターゲット.

enter image description here

3
Techvalens

デスクトップアプリケーションでこの問題に遭遇しました( 'Microsoft.Jet.OLEDB.4.0'プロバイダーはローカルコンピューターに登録されていません)。 32ビットアプリとしてビルドするオプションはありませんでした。これが同じ状況で他の人たちに役立つことを願っています。

私は以下をしました、そして、問題は消えました:

  1. 64ビットバージョンの Microsoft Accessデータベースエンジン2010再配布可能 をインストールしました。これは、neoが推奨しています。

  2. プロバイダをMicrosoft.ACE.OLEDB.12.0に変更しました

2
robinhood9

より最適な解決策は上記のように単純に再コンパイルすることですが、それにはソースコードへのアクセスが必要です。私の場合は、完成した.exeだけがあり、このソリューションを使用する必要がありました。アプリケーションのロード特性を変更するために、.NET SDKのCorFlags.exeを使用します。

  1. .Net Framework SDKをダウンロードします(私は個人的に使用しています .5 ですが、使用するバージョンはアプリケーションに必要な.Net以上である必要があります)。
  2. インストール時に必要なのはCorLibs.exeだけなので、Windows開発ツールをチェックしてください。
  3. インストール後、あなたのCorFlags.exeを見つけてください。私の.NET Framework 3.5 SDKのインストールでは、それはC:\Program Files\Microsoft SDKs\Windows\v7.0\Binにありました。
  4. コマンドプロンプトを開き、path/to/CorFlags.exe path/to/your/exeFile.exe /32Bit+を入力します。

これで終わりです!これにより、プログラムが32ビットWOW64モードで起動するようにプログラムの起動フラグが設定され、Microsoft.jet.oledb.4.0にアクセスできるようになります。

2
Cullub

接続文字列をからに変更しました

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の登録を要求されたことがない場合でも、うまくいきます。

1
Dilhan RK

あなたのマシンに基づいてプロパティを変更するだけですべてが完了しました:-)

プロジェクト--->プロパティ--->ビルド--->ターゲットフレームワーク---> X64

または

プロジェクト--->プロパティ--->ビルド--->ターゲットフレームワーク---> X86

1
Ajmal

IIS設定アプリケーションプールの詳細設定の変更。有効な32ビットアプリケーション

1
dpsrikanth

[スタート] - > [ファイル名を指定して実行]をクリックし、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

0
user1089766

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

  • しかし、32ビットアプリケーションのためにJetに戻る必要がある場合、それがどのように機能するのか私にはわかりません。

ただし、Expressバージョンではプロジェクトを32ビットに切り替えることができる場合があります(私は試したことがなく、2008年以降はインストールされていません)。

Accessデータベースを完全に廃止し、問題を解決して代わりにSQLサーバーにアクセスする時が来たのではないでしょうか。

0
Anant Dabhi

古いバージョンの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

参考: こちら

0
Usman Khalid

私はWinformsにVS2013を使用しています、以下の解決策は私のために働きました。

0
A Ghazal

私は私がこのファイルを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'を開くことも、ファイルに書き込むこともできません。他のユーザーによって既に排他的に開かれているか、そのデータを表示および書き込みするための許可が必要です。 それは私がそれを解決することから遠くないと私に言う。

その間にファイルを開いたプロセスが他にあるかもしれません。その上で実行する必要があるのは再起動だけで、すべてが期待どおりに円滑に開始されます。

0
Nick