ฉันมีไฟล์ปฏิบัติการที่ทำงานได้ดีเมื่อทำงานบน Windows 32 บิต แต่หยุดพักเมื่อทำงานบน Windows 64 บิต
มีวิธีที่ฉันสามารถบังคับให้ทำงานในโหมด 32 บิตบนเครื่อง 64 บิตหรือไม่?
ฉันไม่สามารถเข้าถึงซอร์สโค้ดได้
ฉันมีไฟล์ปฏิบัติการที่ทำงานได้ดีเมื่อทำงานบน Windows 32 บิต แต่หยุดพักเมื่อทำงานบน Windows 64 บิต
มีวิธีที่ฉันสามารถบังคับให้ทำงานในโหมด 32 บิตบนเครื่อง 64 บิตหรือไม่?
ฉันไม่สามารถเข้าถึงซอร์สโค้ดได้
คำตอบ:
คุณต้องการคำตอบด้านเทคนิคอย่างไร คุณอาจบังคับให้ 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 บิตเท่านั้น%SystemRoot%\SYSWOW64\cmd.exe
และมันก็ล้มเหลวในทางเดียวกัน - แสดงข้อความผิดพลาด - และเมื่อตรวจสอบในกระบวนการ TaskManager exe ของฉันไม่ได้แสดงให้เห็นว่าเป็นกระบวนการแบบ 32 บิต
SYSWOW64\cmd.exe
ทำให้ยังคงสามารถเรียกใช้เป็นกระบวนการแบบ 64 บิตได้ (ฉันเพิ่งลอง)
หากคุณมี windows 7 professional (หรือสูงกว่า) ให้ใช้โหมด XP เสมือนจากMicrosoft
สิ่งนี้เลียนแบบ (?) สภาพแวดล้อมแบบ 32 บิตและมันพิสูจน์แล้วว่ามีประโยชน์สำหรับการเรียกใช้โปรแกรม 16 บิตแบบเก่า
พยายามทุกอย่างและไม่มีอะไรทำงาน แต่คิดว่าเกี่ยวกับการย้ายไดเรกทอรี gta iv จากไฟล์ C / program (x86) ไปยังไฟล์ C / program และทำงานได้เนื่องจาก x86 นั้นใช้กับแอพ 32 บิต (ฉันคิดว่า) แต่ก็ใช้งานได้อยู่ดี
มีวิธีที่ง่ายกว่าในการรองรับสิ่งนี้ (ไม่ใช่วิธีแก้ปัญหาระยะยาว)
วางแอปพลิเคชัน "corflags.exe" ลงในโฟลเดอร์ \ windows \ system32 เปิดบรรทัดคำสั่งในฐานะผู้ดูแลระบบและพิมพ์ ...
corflags "เส้นทางและชื่อของ exe" / 32BITPREF32 +
สิ่งนี้จะบังคับให้แอปพลิเคชันทำงานเป็นกระบวนการแบบ 32 บิตแทนที่จะเป็นแบบ 64 บิต