x64で動かないAnyCPUな.NETアプリ

64-bitなWindowsを使っていると悲しくなるのが、特定のプログラムが、作者の不注意によって64-bitで動かなくなっていることが良くあること。
.NETのアプリだとありがちなのが、本体は、Pure .NETで作られていて、ライブラリとして、32-bitのDLLを利用しているというパターン。この場合、作者が64-bitマシンでの動作を確認していないと、単純にAnyCPUでビルドされているということが多い。

実行時に、32-bitのDLLをロードしようとしたときに、アプリがすでに64-bitで動いているため、互換性を維持できずに、BadImageFormatExceptionを送出してアプリが死んでしまう。

まぁ、作者に報告して、x86を明示的に指定してビルドし直してもらえれば良いけど、それには時間もかかるし、面倒だ。

CorFlags

こんなときに便利なのが、CorFlags.exe。このツールを使えば、無理矢理、exeを32-bitで動くように仕立てることが出来る。使い方は簡単。

corflags /32bit+ target.exe

target.exeの部分は適宜、置き換えるとして、こうやって、間違って64-bitで動いてしまっているexeを32-bitにしまくればいい。