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を使った業務フレームワーク」カテゴリの記事
- 風景写真 (2011/12/17 9:00)(2011.12.18)
- NET Frameworkアプリケーションを64bit OS上で32bitモードで動かす方法(その2)(2009.05.17)
- NET Frameworkアプリケーションを64bit OS上で32bitモードで動かす方法(2009.05.03)
- 開発前に考えること(2009.01.18)
- 業務フレームワークの目的(2009.01.18)
「ASP.NETサンプル」カテゴリの記事
- ASP.NET(C#)でIEのファイルダウンロードダイアログボタンをカスタマイズ(その3)(2010.03.15)
- ASP.NET(C#)でIEのファイルダウンロードダイアログボタンをカスタマイズ(その2)(2010.02.01)
- IE8プロセス間のセッション共有問題と共有解除(2009.10.31)
- ASP.NET(C#)でIEのファイルダウンロードダイアログボタンをカスタマイズ(2009.09.21)
- ASP.NET(C#)でIEにOfficeドキュメントを表示(2009.08.05)
「C#サンプル」カテゴリの記事
- C#でDIを実装(2009.09.12)
- C#でプラグイン実装(2009.09.04)
- C#で共有フォルダ作成/削除(2009.08.30)
- C#でショートカットファイル作成(2009.08.29)
- C#でCSV・TSVファイル作成(2009.06.28)
コメント
« サービスアプリ追加(ランダムパスワード生成) | トップページ | サービスアプリ追加(CAPCHA作成サービス) »
助かりました,ありがとうございます.
ここ数日,下記のランタイムエラーのため,色々なページを探し回っていました.
'Emgu.CV.CvInvoke' のタイプ初期化子が例外をスローしました。
基本的に,Emgu に関するものだと思い込んでいたので,それに関するQAを中心に調べていました.
エラーログを見ていたところ,下記のメッセージがあることに思い当たり,ご提供のページに行き着きました.
System.BadImageFormatException はハンドルされませんでした。
ここで,「.Netの64bitと.Netの32bitのものが混ざってると起きるようです」の一文に出くわし,これまで,色々と試みてきたことよりもすっきりと納得いくなと感じ,ここに書かれてある手順を踏んでみることにしました.
すると,見事に,解決しました.
本当に,感謝です.
ありがとうございました.
投稿: JJ | 2011年12月19日 (月) 14時43分
JJさん。コメントありがとうございます。
お役に立って何よりです。
BadImageFormatExceptionは環境変化のタイミングで、かつ他のエラーに被さって出るので原因特定までに時間掛かりますよね~。
投稿: niyo | 2011年12月22日 (木) 21時54分
環境こそ違いますが、同じエラーで3日間悩んでおりました・・・。
あちこちのページで対処法を探していましたが、どれも解決できず。
IISにも不慣れなもので、設定もあまり見た事はありませんでしたが、
「32 ビット アプリケーションの有効化」のところを拝見して、
「そんな設定があるのか!」と思い、試してみたところ、
今まで悩んでいたのが嘘のようにバッチリいきました!
目から鱗です。
通りがかりで恐縮ですが、感謝のあまりコメントさせていただきました。
助かりました。ありがとうございます!
投稿: おがわ | 2014年6月11日 (水) 14時58分
おがわさん
お役になって何よりです。
ブログ作成者niyoな
投稿: niyo | 2014年6月11日 (水) 20時35分
助かりました。http://www.atmarkit.co.jp/fdotnet/special/vcppinvista01/vcppinvista01_02.html
のページのソースが本件のエラーで実行されず、ずっとはまっていました。
助かりました。
投稿: tenlpt | 2014年8月26日 (火) 07時53分
tenlpt さん
お役になって何よりです。
ブログ作成者niyoな
投稿: | 2014年8月26日 (火) 18時37分