मैं 64-बिट मशीन पर 32-बिट मोड में एक exe कैसे चला सकता हूं?


18

मेरे पास एक निष्पादन योग्य है जो 32-बिट विंडोज़ पर चलने पर ठीक काम करता है लेकिन 64-बिट विंडोज़ पर चलने पर टूट जाता है।

क्या कोई तरीका है जो मैं इसे 64-बिट मशीन पर 32-बिट मोड में चलाने के लिए मजबूर कर सकता हूं?

मेरे पास स्रोत कोड तक पहुंच नहीं है।


यह बहुत मतलब नहीं है। जब तक सॉफ्टवेयर में कुछ कोड नहीं होता है जो 64 बिट मशीन पर नहीं चलने पर स्पष्ट रूप से विफल हो जाता है। 32 बिट 64 बिट पर ठीक चलता है, मुद्दा दूसरे तरीके से आता है (32 बिट पर 64 बिट चल रहा है)। क्या आपको एक त्रुटि संदेश मिलता है?
डेव

3
क्या यह कोड आपने लिखा है (जिस स्थिति में स्टैक ओवरफ्लो पूछने की जगह है - कोड और त्रुटि संदेशों के साथ), या यह किसी और का प्रोग्राम है जिसे आप चला रहे हैं? यदि आपको कोई त्रुटि संदेश मिल रहा है, तो यह मदद करेगा।
क्रिसफ

जवाबों:


16

आपको कितना तकनीकी उत्तर चाहिए? आप शायद कुछ एसडीके टूल के साथ एक्सई को हमेशा 32 बिट चलाने के लिए मजबूर कर सकते हैं, लेकिन इसके लिए थोड़ा काम करना पड़ता है।

इसका आसान उत्तर 32 बिट प्रोसेस से लॉन्च करना है (जैसे %SystemRoot%\SYSWOW64\cmd.exeलॉन्च करने के लिए उपयोग )।

अधिक जटिल यह जांचना है कि यह किस प्रकार का है, फिर इसे स्वयं संशोधित करें। यहाँ पृष्ठभूमि समझना है कि भाषाओं से संकलित कोड जो सीधे विंडोज एपीआई के साथ काम करते हैं, डेवलपर द्वारा संकलन समय पर 32bit या 64bit के रूप में बनाए जाते हैं। इसके बाद स्रोत कोड पर वापस जाए बिना इसे बदला नहीं जा सकता।

हालांकि तेजी से अनुप्रयोगों को एक वर्चुअलाइजेशन परत के माध्यम से लिखा जाता है जो लेखन अनुप्रयोगों को आसान बनाता है। दो सामान्य हैं: .NET और जावा। मैं जावा के बारे में सुनिश्चित नहीं हूं सिवाय इसके कि समस्या को हल करने के साथ ही सही जावा रनटाइम स्थापित करने को मजबूर किया जाए।

.NET के लिए आप SDK टूल्स का उपयोग कर सकते हैं:

  • पुष्टि करें कि आवेदन "AnyCPU" है corflags myExe.exe:। .NET SDK से एक .NET असेंबली के हेडर को पढ़ने के लिए एक यूटिलिटी का उपयोग करते हुए, एक exe के लिए कुछ इस तरह लौटेगा:
संस्करण: v4.0.30319
सीएलआर हैडर: 2.5
PE: PE32
CorFlags: 0x20003
ILONLY: 1
32BITREQ: 0
32BITPREF: 1
हस्ताक्षरित: 0

32BITREQमुझसे कहता है यह है AnyCPUक्योंकि 32 बिट की आवश्यकता नहीं है।

  • निर्वासन को केवल 32 बिट में बदलने के लिए corflagsइसके /32BITREQ+विकल्प का उपयोग करें ।

+1 .Net AnyCPU सेटिंग मेरा पहला विचार था। सभी इसे लेता है एक अनजान प्रोग्रामर है जो इस सेटिंग को ठीक से निर्दिष्ट नहीं करता है। यह सुनने के लिए बहुत अच्छा है कि इसे संकलित करने के बाद इसे ठीक करने का एक तरीका है।
हाथ-ई-फूड

2
मैंने इसे लॉन्च करने की कोशिश की %SystemRoot%\SYSWOW64\cmd.exeऔर यह उसी तरह से विफल रहा - एक त्रुटि संदेश दिखा रहा है - और जब मैं टास्कमैनर में जांच करता हूं तो मेरी एक्सई प्रक्रिया 32-बिट प्रक्रिया के रूप में नहीं दिखाई देती
रोरी

1
जैसा कि डेव ने ऊपर पूछा, आपको क्या सटीक त्रुटि संदेश मिलता है?
करण

5
SYSWOW64\cmd.exeअभी भी एक प्रबंधित AnyCPU EXE लॉन्च करने से यह 64-बिट प्रक्रिया के रूप में चलाया जा सकता है (मैंने इसे अभी आज़माया है)।
कार्ल वॉल्श

3

यदि आपके पास विंडोज़ 7 पेशेवर (या उच्चतर) हैं, तो Microsoft से वर्चुअल XP मोड का उपयोग करें

यह 32 बिट वातावरण का अनुकरण करता है (और), यह कुछ पुराने 16 बिट प्रोग्राम को चलाने के लिए उपयोगी साबित हुआ है


0

सब कुछ करने की कोशिश की और कुछ भी काम नहीं किया। लेकिन फिर C / प्रोग्राम फाइल्स (x86) से c / प्रोग्राम फाइल्स में gta iv डायरेक्टरी को स्थानांतरित करने के बारे में सोचा और यह 3286 एप्स के लिए काम कर रहा है (मुझे लगता है) लेकिन फिर भी काम किया।


0

वास्तव में इसे समायोजित करने का एक आसान तरीका है (दीर्घकालिक समाधान नहीं)।

अनुप्रयोग "corflags.exe" को \ windows \ system32 फ़ोल्डर में ड्रॉप करें। व्यवस्थापक के रूप में एक कमांड लाइन खोलें और टाइप करें ...

corflags "exe का पथ और नाम" / 32BITPREF32 +

यह एप्लिकेशन को 64-बिट के बजाय 32-बिट प्रक्रिया के रूप में चलाने के लिए मजबूर करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.