web-dev-qa-db-ja.com

64ビットマシンで32ビットモードでexeを実行するにはどうすればよいですか?

32ビットウィンドウで実行すると正常に機能するが、64ビットウィンドウで実行すると中断する実行可能ファイルがあります。

64ビットマシンで32ビットモードで強制的に実行する方法はありますか?

ソースコードにアクセスできません。

18
Rory

どの程度技術的な答えが必要ですか?いくつかのSDKツールを使用して、exeを常に32ビットで実行するように強制できますが、少し作業が必要です。

簡単な答えは、32ビットプロセスから起動することです(例:%SystemRoot%\SYSWOW64\cmd.exe 打ち上げへ)。

より複雑なのは、それがどのような種類のexeであるかを確認し、それを自分で変更することです。ここでの背景は、Windows APIで直接動作する言語からのコンパイル済みコードが、開発者によってコンパイル時に32ビットまたは64ビットとして作成されることを理解することです。これは、ソースコードに戻らなければ変更できません。

ただし、アプリケーションの記述を容易にする仮想化レイヤーを介してアプリケーションが記述されることが増えています。 .NETとJavaの2つの一般的なものがあります。 Java正しいことを強制することを知っている場合を除いて、私はよくわかりませんJavaランタイムインストールで問題を解決します。

.NETの場合、SDKツールを使用して次のことができます。

  • アプリケーションが「AnyCPU」であることを確認します:corflags myExe.exe。 .NET SDKのユーティリティを使用して.NETアセンブリのヘッダーを読み取ると、exeは次のようなものを返します。
バージョン:v4.0.30319 
 CLRヘッダー:2.5 
 PE:PE32 
 CorFlags:0x20003 
 ILONLY:1 
 32BITREQ: 0 
 32BITPREF:1 
 Signed:0 

32BITREQは、32ビットが必要ないため、これがAnyCPUであることを教えてくれます。

  • corflagsとその/32BITREQ+オプション。exeを32ビットのみに変更します。
17
Richard

Windows 7 Professional(またはそれ以上)を使用している場合は、仮想XPから Microsoft のモードを使用します

これは32ビット環境をエミュレート(?)し、いくつかの古い16ビットプログラムを実行するのに役立ちます。

3
SeanC

すべてを試してみましたが、何もうまくいきませんでした。しかし、gta ivディレクトリをC /プログラムファイル(x86)からC /プログラムファイルに移動することを検討しました。x86は32ビットアプリ用(私はそう思います)なので機能しますが、とにかく機能しました。

0
mdb

これに対応する簡単な方法があります(長期的な解決策ではありません)。

アプリケーション「corflags.exe」を\ windows\system32フォルダーにドロップします。管理者としてコマンドラインを開き、次のように入力します...

corflags "exeのパスと名前"/32BITPREF32 +

これにより、アプリケーションは64ビットではなく32ビットプロセスとして実行されます。

0
Chris Kirkman