最近のトラックバック

2023年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

« サービスアプリ追加(ランダムパスワード生成) | トップページ | サービスアプリ追加(CAPCHA作成サービス) »

NET Frameworkアプリケーションを64bit OS上で32bitモードで動かす方法

.NET Frameworkアプリケーションを64bit OS上で32bitモードで動かす方法の紹介。


※続編としてNET Frameworkアプリケーションを64bit OS上で32bitモードで動かす方法(その2)も書いてみた。


■最初に
最近64bit Windows OSの利用機会が増えているが、ActiveXやC言語DLLが64bitに対応していないことは多い。
.NET FrameworkアプリケーションはOSに応じて32bit・64bitアプリケーションと自動で切り替えて動作するが、 64bit OSで32bitにしか対応していないライブラリを内部利用したアプリケーションを動かすと以下の例外発生する。

BadImageFormatException
間違ったフォーマットのプログラムを読み込もうとしました。 (HRESULT からの例外: 0x800xxxxx)
この回避方法の1つとして64bit OS環境上で.NET Frameworkアプリケーションを32bitモードで動かす設定方法を紹介する。

なお本ページの環境構成は以下の通り。
・Windows Server 2008 64bit
・IIS 7.0
・Visual Studio 2008
・.NET Framework 3.5 SP1



■コンソールアプリケーション・Windowsアプリケーションの32bit化
コンソールアプリケーション・Windowsアプリケーションの設定方法は以下の通り。(Windowsサービスも?)

手順1
ソリューションエクスプローラから該当プロジェクトを右クリック、プロパティを選択する。


手順2
「ビルド」タブを選択し、「プラットフォーム ターゲット」を"x86"に設定する。


結果
タスクマネジャーから該当アプリケーションが32bitで起動していることが確認できる。




■ASP.NETアプリケーションの32bit化
ASP.NETはIIS6.0以降、デフォルトではIISの一部として動くため、ワーカプロセス自体を32bitに設定する必要がある。
設定方法は以下の通り。

手順1
インターネットインフォメーションサービス(IIS)マネージャを起動し、該当アプリケーションで利用しているアプリケーション プールを選択、右クリックで「詳細設定」を選択する。


手順2
「全般」の「32 ビット アプリケーションの有効化」を"true"に設定後、IISを再起動する。


結果
タスクマネジャーからワーカープロセス(w3wp.exe)が32bitアプリケーションとして起動していることが確認できる。



■関連ページ


« サービスアプリ追加(ランダムパスワード生成) | トップページ | サービスアプリ追加(CAPCHA作成サービス) »

ASP.NETを使った業務フレームワーク」カテゴリの記事

ASP.NETサンプル」カテゴリの記事

C#サンプル」カテゴリの記事

コメント

助かりました,ありがとうございます.
ここ数日,下記のランタイムエラーのため,色々なページを探し回っていました.

 'Emgu.CV.CvInvoke' のタイプ初期化子が例外をスローしました。

基本的に,Emgu に関するものだと思い込んでいたので,それに関するQAを中心に調べていました.
エラーログを見ていたところ,下記のメッセージがあることに思い当たり,ご提供のページに行き着きました.

 System.BadImageFormatException はハンドルされませんでした。

ここで,「.Netの64bitと.Netの32bitのものが混ざってると起きるようです」の一文に出くわし,これまで,色々と試みてきたことよりもすっきりと納得いくなと感じ,ここに書かれてある手順を踏んでみることにしました.
すると,見事に,解決しました.
本当に,感謝です.
ありがとうございました.

JJさん。コメントありがとうございます。
お役に立って何よりです。
BadImageFormatExceptionは環境変化のタイミングで、かつ他のエラーに被さって出るので原因特定までに時間掛かりますよね~。

環境こそ違いますが、同じエラーで3日間悩んでおりました・・・。
あちこちのページで対処法を探していましたが、どれも解決できず。

IISにも不慣れなもので、設定もあまり見た事はありませんでしたが、
「32 ビット アプリケーションの有効化」のところを拝見して、
「そんな設定があるのか!」と思い、試してみたところ、
今まで悩んでいたのが嘘のようにバッチリいきました!
目から鱗です。

通りがかりで恐縮ですが、感謝のあまりコメントさせていただきました。
助かりました。ありがとうございます!

おがわさん
お役になって何よりです。
ブログ作成者niyoな

助かりました。http://www.atmarkit.co.jp/fdotnet/special/vcppinvista01/vcppinvista01_02.html
のページのソースが本件のエラーで実行されず、ずっとはまっていました。
助かりました。

tenlpt さん
お役になって何よりです。
ブログ作成者niyoな

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: NET Frameworkアプリケーションを64bit OS上で32bitモードで動かす方法:

« サービスアプリ追加(ランダムパスワード生成) | トップページ | サービスアプリ追加(CAPCHA作成サービス) »

Google AdSense


  • ---

Amazon ウィジェット

  • ウィジェット

@niyo_naのツイート

無料ブログはココログ

Google Analytics