Làm cách nào để chạy exe ở chế độ 32 bit trên máy 64 bit?


18

Tôi có một tệp thực thi hoạt động tốt khi chạy trên các cửa sổ 32 bit nhưng bị hỏng khi chạy trên các cửa sổ 64 bit.

Có cách nào để tôi có thể buộc nó chạy ở chế độ 32 bit trên máy 64 bit không?

Tôi không có quyền truy cập vào mã nguồn.


Điều này không có nhiều ý nghĩa. Trừ khi phần mềm có một số mã rõ ràng khiến nó bị lỗi nếu không chạy trên máy 64 bit. 32 bit chạy tốt trên 64 bit, vấn đề xảy ra theo cách khác (chạy 64 bit trên 32 bit). Bạn có nhận được một thông báo lỗi?
Dave

3
Đây có phải là mã bạn đã viết (trong trường hợp đó Stack Overflow là nơi để hỏi - với mã và thông báo lỗi), hoặc đó có phải là chương trình của người khác mà bạn đang chạy không? Nó sẽ giúp nếu bạn bao gồm bất kỳ thông báo lỗi bạn nhận được.
ChrisF

Câu trả lời:


16

Làm thế nào kỹ thuật một câu trả lời bạn muốn? Bạn có thể có thể buộc exe luôn chạy 32 bit với một vài công cụ SDK, nhưng nó đòi hỏi một chút công việc.

Câu trả lời dễ dàng là khởi chạy từ quy trình 32 bit (ví dụ: sử dụng %SystemRoot%\SYSWOW64\cmd.exeđể khởi chạy).

Điều phức tạp hơn là kiểm tra loại exe đó là gì, sau đó tự sửa đổi nó. Bối cảnh ở đây là để hiểu rằng mã được biên dịch từ các ngôn ngữ hoạt động trực tiếp với API Windows được tạo ra là 32 bit hoặc 64 bit tại thời điểm biên dịch bởi nhà phát triển. Điều này sau đó không thể được thay đổi mà không quay trở lại mã nguồn.

Tuy nhiên, các ứng dụng ngày càng được viết thông qua một lớp ảo hóa giúp cho việc viết ứng dụng trở nên dễ dàng hơn. Có hai cái phổ biến: .NET và Java. Tôi không chắc chắn về Java ngoại trừ việc biết rằng việc cài đặt thời gian chạy Java đúng để giải quyết vấn đề.

Đối với .NET, bạn có thể sử dụng các công cụ SDK để:

  • Xác thực rằng ứng dụng là "AnyCPU" : corflags myExe.exe. Sử dụng một tiện ích từ .NET SDK để đọc các tiêu đề của một cụm .NET, cho một exe sẽ trả về một cái gì đó như:
Phiên bản: v4.0.30319
Tiêu đề CLR: 2.5
PE: PE32
CorFlags: 0x20003
THỜI GIAN: 1
32 BITREQ: 0
32 BITPREF: 1
Đã ký: 0

Điều này 32BITREQcho tôi biết điều này là AnyCPUdo 32bit là không bắt buộc.

  • Sử dụng corflagsvới /32BITREQ+tùy chọn của nó để sửa đổi exe thành 32bit.

+1 Cài đặt .Net AnyCPU là suy nghĩ đầu tiên của tôi. Tất cả chỉ là một lập trình viên không biết để không chỉ định đúng cài đặt này. Thật tuyệt khi nghe có một cách để sửa nó sau khi nó được biên dịch.
Thực phẩm điện tử cầm tay

2
Tôi đã thử khởi chạy nó từ đó %SystemRoot%\SYSWOW64\cmd.exevà nó đã thất bại theo cùng một cách - hiển thị thông báo lỗi - và khi tôi kiểm tra Trình quản lý tác vụ, quy trình exe của tôi không hiển thị dưới dạng quy trình 32 bit
Rory

1
Theo Dave hỏi trên, những gì báo lỗi chính xác để bạn có được?
Karan

5
Khởi chạy AnyCPU EXE được quản lý từ SYSWOW64\cmd.exevẫn khiến nó được chạy dưới dạng quy trình 64 bit (tôi mới thử nó).
Carl Walsh

3

Nếu bạn có windows 7 chuyên nghiệp (hoặc cao hơn), thì hãy sử dụng chế độ XP ảo từ Microsoft

điều này mô phỏng (?) môi trường 32 bit và nó tỏ ra hữu ích khi chạy một số chương trình 16 bit cũ


0

Đã thử tất cả mọi thứ và không có gì làm việc. nhưng sau đó nghĩ về việc chuyển thư mục gta iv từ tệp C / chương trình (x86) sang tệp C / chương trình và nó hoạt động vì x86 dành cho các ứng dụng 32 bit (tôi nghĩ vậy) nhưng dù sao cũng hoạt động.


0

Thực sự có một cách dễ dàng hơn để đáp ứng điều này (không phải là một giải pháp lâu dài).

Thả ứng dụng "corflags.exe" vào thư mục \ windows \ system32. Mở một dòng lệnh với tư cách quản trị viên và gõ ...

corflags "đường dẫn và tên của exe" / 32BITPREF32 +

Điều này sẽ buộc ứng dụng chạy như một quá trình 32 bit thay vì 64 bit.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.