64ビットマシンで32ビットモードでexeを実行する方法を教えてください。
32ビットウィンドウで実行すると正常に動作しますが、64ビットウィンドウで実行すると壊れてしまう実行ファイルがあります。
64ビットマシンで32ビットモードで強制的に実行する方法はありますか?
ソースコードにアクセスできません。
32ビットウィンドウで実行すると正常に動作しますが、64ビットウィンドウで実行すると壊れてしまう実行ファイルがあります。
64ビットマシンで32ビットモードで強制的に実行する方法はありますか?
ソースコードにアクセスできません。
どのくらい技術的な答えが必要なのでしょうか?いくつかのSDKツールを使用してexeを常に32bitで実行するように強制することができますが、少し手間がかかります。
簡単な答えは32bitプロセスから起動することです(例:%SystemRoot%\SYSWOW64\cmd.exe
を使用して起動する)。
より複雑なのは、それがどのような種類のexeであるかを確認し、自分で修正することです。ここでの背景には、Windows API を直接操作する言語からコンパイルされたコードは、開発者によってコンパイル時に 32bit または 64bit として作成されることを理解する必要があります。これは、ソースコードに戻らずに変更することはできません。
しかし、最近ではアプリケーションの記述を容易にする仮想化レイヤーを介してアプリケーションが記述されるようになってきています。一般的なものとしては、.NETとJavaの2つがあります。Javaについては、正しいJavaランタイムを強制的にインストールすることで問題が解決することを知っている以外はよくわかりません。
.NETの場合、SDKツールを使って以下のことができます。
corflags myExe.exe
. .NET SDKのユーティリティを使用してexeの.NETアセンブリのヘッダを読み取ると、以下のような内容が返されます。Version : v4.0.30319 CLR Header: 2.5 PE : PE32 CorFlags : 0x20003 ILONLY : 1 32BITREQ : 0 32BITPREF : 1 Signed : 0
32bitは必要ないので、32BITREQ
はこれがAnyCPU
であることを教えてくれます。
corflags
とその/32BITREQ+
オプションを使用してください。実はもっと簡単な方法があります(長期的な解決策ではありません)。
アプリケーション “corflags.exe "を”\windowss\system32 “フォルダにドロップします。管理者としてコマンドラインを開き、次のようにタイプしてください。
corflags "path and name of the exe” /32BITPREF32+
これにより、アプリケーションは64ビットではなく32ビットプロセスとして強制的に実行されます。