ฉันจะเรียกใช้ exe ในโหมด 32 บิตบนเครื่อง 64 บิตได้อย่างไร


18

ฉันมีไฟล์ปฏิบัติการที่ทำงานได้ดีเมื่อทำงานบน Windows 32 บิต แต่หยุดพักเมื่อทำงานบน Windows 64 บิต

มีวิธีที่ฉันสามารถบังคับให้ทำงานในโหมด 32 บิตบนเครื่อง 64 บิตหรือไม่?

ฉันไม่สามารถเข้าถึงซอร์สโค้ดได้


มันไม่สมเหตุสมผลเลย ยกเว้นว่าซอฟต์แวร์มีรหัสบางอย่างที่ทำให้มันล้มเหลวอย่างชัดเจนหากไม่ได้ทำงานบนเครื่อง 64 บิต 32 บิตทำงานได้ดีบน 64 บิตปัญหามาอีกรอบ (ทำงาน 64 บิตบน 32 บิต) คุณได้รับข้อความแสดงข้อผิดพลาดหรือไม่?
เดฟ

3
คุณใช้รหัสนี้หรือไม่ (ในกรณีนี้ Stack Overflow เป็นที่ที่ต้องถาม - พร้อมด้วยรหัสและข้อความแสดงข้อผิดพลาด) หรือเป็นโปรแกรมของบุคคลอื่นที่คุณใช้งานอยู่ มันจะช่วยถ้าคุณรวมข้อความผิดพลาดที่คุณได้รับ
ChrisF

คำตอบ:


16

คุณต้องการคำตอบด้านเทคนิคอย่างไร คุณอาจบังคับให้ exe รัน 32 บิตด้วยเครื่องมือ SDK บางตัวได้เสมอ แต่ก็ต้องใช้งานเล็กน้อย

คำตอบง่าย ๆ คือเริ่มจากกระบวนการ 32 บิต (เช่นใช้%SystemRoot%\SYSWOW64\cmd.exeเพื่อเริ่มต้น)

ความซับซ้อนมากขึ้นคือการตรวจสอบว่าเป็น exe ประเภทใดจากนั้นแก้ไขด้วยตนเอง ความเป็นมาที่นี่คือการทำความเข้าใจว่าโค้ดที่คอมไพล์จากภาษาที่ทำงานกับ Windows API โดยตรงนั้นถูกสร้างขึ้นเป็น 32 บิตหรือ 64 บิตในเวลาคอมไพล์โดยผู้พัฒนา สิ่งนี้ไม่สามารถเปลี่ยนแปลงได้โดยไม่ต้องกลับไปที่ซอร์สโค้ด

อย่างไรก็ตามแอพพลิเคชั่นมากขึ้นถูกเขียนผ่านเลเยอร์เวอร์ช่วลไลเซชัน มีสองคนที่พบบ่อยคือ. NET และ Java ฉันไม่แน่ใจเกี่ยวกับ Java ยกเว้นการรู้ว่าบังคับให้ติดตั้ง Java runtime runtime ที่ถูกต้องพร้อมแก้ไขปัญหา

สำหรับ. NET คุณสามารถใช้เครื่องมือ SDK เพื่อ:

  • ตรวจสอบว่าโปรแกรมคือ corflags myExe.exe"AnyCPU": การใช้ยูทิลิตีจาก. 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
ในฐานะที่เป็นเดฟถามข้างต้นสิ่งที่ผิดพลาดที่แน่นอนคุณได้รับ?
Karan

5
การเปิดใช้ AnyCPU EXE ที่ได้รับการจัดการSYSWOW64\cmd.exeทำให้ยังคงสามารถเรียกใช้เป็นกระบวนการแบบ 64 บิตได้ (ฉันเพิ่งลอง)
Carl Walsh

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 บิต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.