Bagaimana saya bisa menjalankan exe dalam mode 32-bit pada mesin 64-bit?


18

Saya memiliki executable yang berfungsi dengan baik ketika dijalankan pada windows 32-bit tetapi rusak ketika dijalankan pada windows 64-bit.

Apakah ada cara saya bisa memaksanya untuk berjalan dalam mode 32-bit pada mesin 64-bit?

Saya tidak memiliki akses ke kode sumber.


Ini tidak masuk akal. Kecuali jika perangkat lunak memiliki beberapa kode yang secara eksplisit membuatnya gagal jika tidak dijalankan pada mesin 64bit. 32 bit berjalan dengan baik pada 64bit, masalahnya muncul sebaliknya (menjalankan 64bit pada 32bit). Apakah Anda mendapatkan pesan kesalahan?
Dave

3
Apakah kode ini telah Anda tulis (dalam hal ini Stack Overflow adalah tempat untuk bertanya - dengan kode dan pesan kesalahan), atau apakah itu program orang lain yang Anda jalankan? Ini akan membantu jika Anda memasukkan pesan kesalahan yang Anda dapatkan.
ChrisF

Jawaban:


16

Seberapa teknis jawaban yang Anda inginkan? Anda mungkin dapat memaksa exe untuk selalu menjalankan 32bit dengan beberapa alat SDK, tetapi itu memang membutuhkan sedikit kerja.

Jawaban mudahnya adalah memulai dari proses 32bit (mis. Gunakan %SystemRoot%\SYSWOW64\cmd.exeuntuk meluncurkan).

Yang lebih kompleks adalah memeriksa jenis exe apa itu, kemudian memodifikasinya sendiri. Latar belakang di sini adalah untuk memahami bahwa kode yang dikompilasi dari bahasa yang langsung bekerja dengan Windows API dibuat sebagai 32bit atau 64bit pada waktu kompilasi oleh pengembang. Ini tidak dapat diubah tanpa kembali ke kode sumber.

Namun semakin banyak aplikasi yang ditulis melalui lapisan virtualisasi yang membuat penulisan aplikasi lebih mudah. Ada dua yang umum: .NET dan Java. Saya tidak yakin tentang Java kecuali mengetahui bahwa memaksa instalasi runtime Java yang tepat dengan menyelesaikan masalah.

Untuk .NET Anda dapat menggunakan alat SDK untuk:

  • Validasi bahwa aplikasi "AnyCPU": corflags myExe.exe. Menggunakan utilitas dari .NET SDK untuk membaca tajuk rakitan .NET, untuk exe akan mengembalikan sesuatu seperti:
Versi: v4.0.30319
CLR Header: 2.5
PE: PE32
CorFlags: 0x20003
SANGAT: 1
32BITREQ: 0
32BITPREF: 1
Ditandatangani: 0

yang 32BITREQmemberitahu saya ini adalah AnyCPUkarena 32bit tidak diperlukan.

  • Gunakan corflagsdengan /32BITREQ+opsi untuk memodifikasi exe menjadi 32bit saja.

+1 Pengaturan .Net AnyCPU adalah yang pertama kali saya pikirkan. Yang diperlukan hanyalah programmer yang tidak sadar untuk tidak menentukan pengaturan ini dengan benar. Sangat menyenangkan mendengar ada cara untuk memperbaikinya setelah dikompilasi.
Hand-E-Food

2
Saya mencoba meluncurkannya %SystemRoot%\SYSWOW64\cmd.exedan gagal dengan cara yang sama - menampilkan pesan kesalahan - dan ketika saya memeriksa TaskManager, proses exe saya tidak muncul sebagai proses 32-bit
Rory

1
Seperti meminta Dave di atas, apa pesan kesalahan yang sebenarnya yang Anda dapatkan?
Karan

5
Meluncurkan AnyCPU EXE yang dikelola dari SYSWOW64\cmd.exemasih menyebabkannya dijalankan sebagai proses 64-bit (saya baru mencobanya).
Carl Walsh

3

Jika Anda memiliki windows 7 profesional (atau lebih tinggi), maka gunakan mode XP virtual dari Microsoft

ini mengemulasi (?) lingkungan 32 bit, dan telah terbukti berguna untuk menjalankan beberapa program 16 bit lama


0

Mencoba segalanya dan tidak ada yang berhasil. tetapi kemudian berpikir tentang memindahkan direktori gta iv dari file C / program (x86) ke file C / program dan berfungsi karena x86 adalah untuk aplikasi 32bit (saya pikir) tetapi tetap bekerja.


0

Sebenarnya ada cara yang lebih mudah untuk mengakomodasi ini (bukan solusi jangka panjang).

Jatuhkan aplikasi "corflags.exe" ke folder \ windows \ system32. Buka baris perintah sebagai administrator dan ketik ...

corflags "jalur dan nama exe" / 32BITPREF32 +

Ini akan memaksa aplikasi untuk berjalan sebagai proses 32-bit, bukan 64-bit.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.