Як я можу запустити exe в 32-розрядному режимі на 64-бітній машині?


18

У мене є виконавчий файл, який працює добре під час роботи на 32-бітних вікнах, але ламається, коли працює на 64-бітних вікнах.

Чи є якийсь спосіб змусити його працювати в 32-бітному режимі на 64-бітній машині?

У мене немає доступу до вихідного коду.


Це не має особливого сенсу. Якщо програмне забезпечення не має коду, який явно робить його відмовою, якщо він не працює на 64-бітній машині. 32-бітний працює на 64-бітовій версії, проблема виходить навпаки (працює на 64-бітній 32-бітній). Ви отримуєте повідомлення про помилку?
Дейв

3
Це написаний вами код (у такому випадку запит про переповнення стека - з кодом та повідомленнями про помилки) чи це чиясь програма, яку ви запускаєте? Це допоможе, якщо ви включили будь-які повідомлення про помилки, які ви отримуєте.
ChrisF

Відповіді:


16

Якої технічної відповіді ви хочете? Ви, ймовірно, можете змусити exe завжди працювати 32-бітовим за допомогою декількох інструментів SDK, але для цього потрібно трохи працювати.

Проста відповідь - це запуск з 32-бітного процесу (наприклад, використання %SystemRoot%\SYSWOW64\cmd.exeдля запуску).

Складніше - перевірити, що це за exe, а потім змінити його самостійно. Тут слід розуміти, що компільований код з мов, які безпосередньо працюють з API API, створюється розробником як 32-бітовий або 64-бітний під час компіляції. Потім це неможливо змінити, не повертаючись до вихідного коду.

Однак все частіше програми пишуться через шар віртуалізації, що спрощує написання програм. Існує два поширених: .NET і Java. Я не впевнений у Java, окрім того, що знаю, що змусити встановити правильну програму виконання Java з вирішенням проблеми.

Для .NET ви можете використовувати інструменти SDK для:

  • Підтвердити , що додаток «AnyCPU»: corflags myExe.exe. Використовуючи утиліту .NET SDK для читання заголовків збірки .NET, для exe повернеться щось на зразок:
Версія: v4.0.30319
Заголовок CLR: 2.5
PE: PE32
CorFlags: 0x20003
ІЛЬНО: 1
32BITREQ: 0
32BITPREF: 1
Підписано: 0

32BITREQкаже мені , що це AnyCPUтому , що 32bit не потрібно.

  • Використовуйте corflagsз його /32BITREQ+опцією, щоб змінити EXE на 32-бітний.

+1 Налаштування .Net AnyCPU було моєю першою думкою. Все, що потрібно, - це невідомий програміст, щоб не правильно вказати цей параметр. Приємно почути, що існує спосіб виправити це після його складання.
Hand-E-Food

2
Я спробував запустити його, %SystemRoot%\SYSWOW64\cmd.exeі він не вдався так само - показавши повідомлення про помилку - і коли я зареєструвався в TaskManager, мій процес exe не відображається як 32-бітний процес
Rory

1
Як Дейв запитав вище, яке саме повідомлення про помилку ви отримуєте?
Каран

5
Запуск керованого AnyCPU EXE з програми SYSWOW64\cmd.exeвсе ще спричиняє його запуск як 64-розрядний процес (я просто спробував це).
Карл Уолш

3

Якщо у вас Windows 7 Professional (або вище), використовуйте віртуальний режим XP від Microsoft

це імітує (?) 32-бітове середовище, і це виявилося корисним для запуску старих 16-бітних програм


0

Перепробував усе і нічого не вийшло. але потім подумав про переміщення каталогу gta iv з файлів C / Program (x86) у файли C / Program, і він працює, оскільки x86 призначений для 32-бітних додатків (я думаю), але працював у будь-якому випадку.


0

Насправді є простіший спосіб вирішити це (не довгострокове рішення).

Запустіть додаток "corflags.exe" у папку \ windows \ system32. Відкрийте командний рядок як адміністратор і введіть ...

corflags "шлях і ім'я exe" / 32BITPREF32 +

Це змусить програму працювати як 32-бітний процес замість 64-бітного.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.