2010-12-02 16 views
0

数年前、Microsoft ACEとJET OLEDBを使用してExcelスプレッドシートをCSVファイルに変換したC#.NETプログラムを作成しました。最近、Windows Server 2008 x64サーバーにアップグレードしました。 JETは廃止されて以来、この方法はもはや機能しませんでした。もともとExcel 2003の.xlsファイルはJETと.xlsxで処理されましたExcel 2007ファイルはACEで処理されました。私は両方のためにACEを使用するように接続文字列を変更しました。MDAC OLEDBコマンドプロンプト32ビット問題

コマンドプロンプトでプログラムを正常に実行できるようになりました。しかし、私たちのオートメーションソフトウェア(Start-> Runメソッドに似たプログラムを実行しているようです)を使用すると、Microsoft Data Access Componentsがインストールされていないというエラーが表示されます。これらを調べると、32ビットシステムでのみ動作し、Windows Server 2000以上のものはサポートしていないようです。

アイデアをお持ちですか?最新のベータx64 ACE OLEDBドライバがインストールされています。プログラムは手動で正常に実行されます。また、x86のターゲットプラットフォームでプログラムをコンパイルしようとしました。また、オートメーションソフトウェアが使用するWindowsアカウントを使用してプログラムを手動で正常に実行しました。 64ビットWindows上で

答えて

1

、プロセスはbit化を定義します:32または64

あなたは64ビットモードでプログラムを起動し、そのプログラムは、COM(OLEDBはCOMベースである)、それをしない場合COM 64ビットDLLのみを検索します(実際には、64ビットCOMコンポーネントが登録されているレジストリの64ビット側のみを使用します)。

32ビットモードでプログラムを起動し、そのプログラムがCOMを実行すると、COM 32ビットDLLのみが検索されます。

今、それはC#コンパイラのバージョンに依存することができますが、今日、ほとんどのC#プログラムは "任意のCpu"としてコンパイルされるように設定されています。これは、32ビットOSで32、64ビットOSで64として動作することを意味します.COMを直接的または間接的に使用すると複雑になります(COMを使用していることがわかっていないことさえあります)。 。

だから... ...合計する:

1)は、タスクマネージャで簡単にプロセスのbit化を(決定、64ビットマシン上で32ビットプロセス)は、「* 32」接尾辞います。

2)対応するCOM OLEDBドライバをインストールします。

OLEDBドライバが64ビットモードで存在しない場合は、C#.EXEを再コンパイルするか、32ビットモードを強制するためにパッチを適用する必要があります。これにはCORFLAGSツールを使用できます。

+0

ありがとうございました。ターゲットプラットフォームを変更しようとしましたが、これはoledbドライバの動作方法を間違いなく変更しました。しかし、私たちのオートメーションプログラムは、実行しているにもかかわらず、MDACエラーを投げているようです。それはプログラムのコントロールを与えているようには見えません。 –

+0

今は別のエラーを投げていて、あなたが何とか進歩したよりも、今は違う問題です。 –

+0

正しい。私たちのオートメーションソフトウェアがMDACを何らかの狂った理由で使用しようとしているようです。 MDACはx64サーバーをサポートしていません。 –

関連する問題