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にしまくればいい。