32 बिट और 64 बिट विंडोज के लिए अलग-अलग पैठ पर्यावरण चर - क्या यह संभव है?


14

क्या PATHचलने की प्रक्रिया की छवि (32 बिट / 64 बिट) के प्रकार के लिए पर्यावरण चर का पूरा या हिस्सा होना संभव है ? जब मैं 64bit cmd.exe के भीतर से कुछ ऐप चलाता हूं, तो मैं इसे OpenSSL लाइब्रेरी का 64 बिट संस्करण चुनना चाहता हूं, जबकि जब मैं 32bit cmd.exe के भीतर से कुछ ऐप चलाता हूं, तो मैं चाहूंगा कि यह OpenSSL लाइब्रेरी का 32 बिट संस्करण चुन ले।

FOLLOW UP
जहाँ.exe को OpenSSL लिबास नहीं मिलता है जब PATH वातावरण चर में% ProgramFiles% चर का उपयोग किया जाता है

जवाबों:


9

सुनिश्चित %ProgramFiles%करने के लिए %ProgramFiles(x86)%आप के लिए काम करने के लिए चर स्विचिंग env:

ओपनएसएसएल लाइब्रेरी के x32 और x64 संस्करणों के साथ उचित %programfiles%और %ProgramFiles(x86)%निर्देशिकाओं में और PATHपर्यावरण चर में फ़ोल्डरों को रखें, %programfiles%चर के माध्यम से इन फ़ोल्डरों के संदर्भ का उपयोग करें ।

इस तरह, जब आप x32-बिट वातावरण में चल रहे होते हैं, तो आपकी PATHप्रविष्टि %programfiles%/OpenSSL/स्वचालित रूप से %ProgramFiles(x86)%/OpenSSL/डिस्क पर हल हो जाएगी ।


1
वैसे मुझे काम करने में थोड़ी परेशानी हो रही है। echo %programfiles%cmd.exe के प्रकार के आधार पर अलग-अलग पथ दिखाता है, लेकिन यह where ssleay32.dllcmd.exe (32bit और 64bit) के दोनों प्रकारों में इस dll को नहीं ढूँढ सकता है और INFO: Could not find files for the given pattern(s).किसी भी विचार को प्रदर्शित करता है ?
पिओटर डोब्रोगोस्ट

यह मदद कर सकता है: कम से कम यह मदद कर सकता है: stackoverflow.com/questions/906310/…
Darokthar

1
अगर dll में से एक 32-बिट वाला है, तो 64-बिट मशीन पर इसे C: \ windows \ syswow64 फ़ोल्डर में जाना चाहिए
romka

यह मेरे लिए काम नहीं करता है। जब मैं PATH चर परिभाषा में% ProgramFiles% शामिल करता हूं, तो यह बिल्कुल भी विस्तारित नहीं होता है, इसलिए मेरा exe अपने dll को नहीं ढूंढता है।
कार्लोस ए। इबर्रा

7

रोमका द्वारा प्रदान किया गया उत्तर (सही रूप में जांचा गया) सरल और सुरुचिपूर्ण है, लेकिन दुर्भाग्य से काम नहीं करता है (कम से कम विंडोज 7 और विंडोज 8 64 बिट्स पर, मैंने अपने परीक्षण को आगे नहीं बढ़ाया)।

समस्या इस तथ्य से आती है कि सिस्टम% PATH% चर हमेशा अन्य env चर का विस्तार नहीं करता है: यह उदाहरण के लिए% SYSTEMDRIVE% के साथ काम करता है, लेकिन दुर्भाग्य से% PROGRAMFILES% के लिए नहीं। विकिपीडिया सुझाव देता है कि यह व्यवहार अप्रत्यक्ष के स्तर से आता है (% SYSTEMDRIVE% एक तीसरे env चर का संदर्भ नहीं देता है)।

एकमात्र समाधान मैंने पाया है कि फाइल सिस्टम पुनर्निर्देशक जादू और निर्देशिका प्रणाली 32 / SysWoW64 का उपयोग करना है, जैसा कि टिप्पणियों में सुझाया गया है।

Windows निर्देशिका में DLL की सीधी तैनाती से बचने के लिए, जिसे आमतौर पर बनाए रखना मुश्किल होता है, एक कस्टम निर्देशिका (विंडोज विस्टा और विंडोज के बाद के संस्करणों पर काम करता है) के बजाय सॉफ्टलिंक को तैनात कर सकता है:

वैसे, प्रासंगिक पदों पर सीधे टिप्पणी नहीं करने के लिए खेद है: वर्तमान में ऐसा करने के लिए मेरे खाते पर पर्याप्त प्रतिष्ठा नहीं है।


5

हाँ यह बिलकुल संभव है। बस एक तीन .bat फाइलें लिखें। पहले व्यक्ति को इस तरह दिखना चाहिए:

@echo off
if "%1" == "" goto x86
if not "%2" == "" goto usage

if /i %1 == x86 goto x86
if /i %1 == ia64 goto ia64
goto usage

:x86
if not exist "%~dp0bin\x86.bat" goto missing
call "%~dp0bin\x86.bat"
goto :eof

:ia64
if not exist "%~dp0bin\ia64.bat" goto missing
call "%~dp0bin\ia64.bat"
goto :eof

:usage
echo Error in script usage. The correct usage is:
echo %0 [option]
echo where [option] is: x86 ^| ia64
echo:
echo For example:
echo %0 x86
goto :eof

:missing
echo The specified configuration type is missing. The tools for the
echo configuration might not be installed.
goto :eof

दूसरी और तीसरी .bat फ़ाइल मूल रूप से एक ही हैं, सिवाय उनके नाम में भिन्नता के। पहले को x86.bat और दूसरे को ia64.bat कहा जाएगा और उन्हें एक फोल्डर में रखा जाता है जिसे बिन कहा जाता है जो पहले बैट फाइल के ऊपर होता है। आपके पास यह होगा:

PATH\first.bat
PATH\bin\x86.bat
PATH\bin\ia64.bat

दूसरी और तीसरी .bat फ़ाइल की सामग्री इस तरह दिखनी चाहिए:

@set PATH=THE PATH YOU WANT

आप पहली .bat फ़ाइल के लिए एक लिंक बना सकते हैं जिसमें निम्नलिखित सेटिंग्स होंगी:

लक्ष्य:% comspec% / k "PATH \ first.bat" विकल्प | जहां विकल्प x86 या ia64 है

में शुरू: पथ | जहां PATH आपके पहले.बैट को PATH है

स्क्रिप्ट सरल स्क्रिप्ट है जिसका उपयोग Microsoft अपने विज़ुअल स्टूडियो वातावरण के लिए सही कमांड लाइन शुरू करने के लिए करता है। आप बस एन स्क्रिप्ट के लिए इस स्क्रिप्ट का विस्तार कर सकते हैं। विभिन्न परिवेशों के लिए .bat फ़ाइलों को जोड़कर और अधिक विकल्पों और गोटो कथनों के साथ first.bat को संपादित करके। मुझे आशा है कि यह स्वयं की व्याख्या है।

और मुझे आशा है कि Microsoft ने उनकी स्क्रिप्ट का उपयोग करने के लिए मुझ पर मुकदमा नहीं किया।

संपादित करें:

आह मुझे लगता है कि मैं तुम्हें थोड़ा गलत समझा। 32bit cmd लाइन के लिए लिंक इस प्रकार बनाया जाना चाहिए:

लक्ष्य:% विंडीर% \ SysWoW64 \ cmd.exe "पथ \ first.bat" x86

EDIT2:

कुछ इस तरह का प्रयास करें:

if "%ProgramFiles%" == "%ProgramFiles(x86)%" goto x64_PATH
if "%ProgramFiles%" == "%ProgramW6432%" goto x86_PATH

:x64_PATH
@set PATH=YOUR 64 bit PATH
SOME_PATH\your64BitApp.exe
goto :eof

:x86_PATH
@set PATH=YOUR 32bit PATH
SOME_PATH\your32BitApp.exe
goto :eof

1
आप इसे स्पष्ट करना चाहते हैं, बस स्पष्टता के लिए - ऑड्स हैं, वे इंटेल 64 बिट तकनीक (ia64 - इटेनियम सीपीयू) का उपयोग नहीं कर रहे हैं, बल्कि एएमडी 64 बिट प्रौद्योगिकी, जिसे आमतौर पर x64 के रूप में संदर्भित किया जाता है।
मल्टीवर्स आईटी

आपके उत्तर के लिए धन्यवाद। विचार अच्छा है। हालाँकि मैं कुछ सिस्टम लेवल सॉल्यूशन की तलाश कर रहा था जैसे कि %ProgramFiles%वैरिएबल को संशोधित करने के लिए । (उद्धरण:% ProgramFiles% स्वयं इस बात पर निर्भर करता है कि पर्यावरण चर का अनुरोध करने वाली प्रक्रिया स्वयं 32-बिट या 64-बिट है (यह विंडोज़-ऑन-विंडोज 64-बिट पुनर्निर्देशन के कारण होता है)। en.wikipedia.org/wiki/ … )
पिओट्र डोब्रोगोस्ट

1

मैं केवल बैप्टिस्ट चारडन से उत्तर में दिए गए लिंक का पालन करके प्राप्त किए गए उत्तर को संक्षेप में प्रस्तुत करना चाहता था । का उपयोग करके mklinkकमांड लाइन टूल में एक निर्देशिका प्रतीकात्मक कड़ी बनाने के लिए C:\Windows\system32 और में C:\Windows\SysWOW64, प्रत्येक में एक ही नाम होने (विभिन्न लक्ष्यों हालांकि), तो आप सिर्फ एक में जोड़ सकते हैं C:\Windows\system32करने के लिए Pathवातावरण चर। उदाहरण के लिए:

C:\> mklink /D C:\Windows\SysWOW64\my_XXbit_dlls C:\dlls\x86
symbolic link created for C:\Windows\SysWOW64\my_XXbit_dlls <<===>> C:\dlls\x86
C:\> mklink /D C:\Windows\System32\my_XXbit_dlls C:\dlls\x64
symbolic link created for C:\Windows\System32\my_XXbit_dlls <<===>> C:\dlls\x64

0

मुझे यह समस्या हुई है और इसका उत्तर इस प्रकार है:

64 बिट मशीनों पर आपके सिस्टम चर के लिए पथ है c:\progra~2। आपको अपने पर्यावरण चर के लिए एक स्थानहीन मार्ग की आवश्यकता है, अन्यथा सिस्टम आगे से नहीं पढ़ेगा C:\programs

हमारे 32 बिट मशीनों पर पर्यावरण चर companyprograms है c:\program filesऔर 64 बिट्स पर है c:\progra~2। हम फिर उपयोगकर्ताओं के लिए हमारे शॉर्टकट सेट करते हैं%companyprograms%\...

आप इसे ग्रुप पॉलिसी या स्क्रिप्ट के जरिए कर सकते हैं।


-1

जैसा कि फॉलोअप में रोमका ने संकेत दिया, सरल उत्तर SysWOW64 निर्देशिका है।

सौभाग्य से शाइनिंग लाइट प्रोडक्शंस के इंस्टॉलर आपके लिए इसका ख्याल रखते हैं। बस 32 बिट और 64 बिट इंस्टॉलर को चलाएं और .DLLs को विंडो "सिस्टम" डायरेक्टरी में कॉपी करने के लिए चुनें। उचित निर्देशिका को .DLLs के लिए चुना जाता है। (यानी 64 बिट। DLLs सिस्टम 32 में और 32 बिट ।DLLs SysWOW64 में जाते हैं।

एक बार जब मैंने ऐसा किया था तो मेरे 32 बिट ऐप्स को 32 बिट .DLLs और मेरे 64 बिट ऐप्स को 64bit .DLLs मिल गए।

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