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.
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.
Câu trả lời:
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 để:
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 32BITREQ
cho tôi biết điều này là AnyCPU
do 32bit là không bắt buộc.
corflags
với /32BITREQ+
tùy chọn của nó để sửa đổi exe thành 32bit.%SystemRoot%\SYSWOW64\cmd.exe
và 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
SYSWOW64\cmd.exe
vẫn khiến nó được chạy dưới dạng quy trình 64 bit (tôi mới thử nó).
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.