32 비트 및 64 비트 Windows에 대한 다른 PATH 환경 변수-가능합니까?


14

PATH실행중인 프로세스의 이미지 유형 (32 비트 / 64 비트)에 따라 환경의 전체 또는 일부 변수 를 가질 수 있습니까? 64 비트 cmd.exe 내에서 일부 응용 프로그램을 실행할 때 64 비트 버전의 OpenSSL 라이브러리를 선택하고 싶지만 32 비트 cmd.exe 내에서 일부 응용 프로그램을 실행할 때 32 비트 버전의 OpenSSL 라이브러리를 선택하고 싶습니다.

FOLLOW UP
%의의 ProgramFiles % 변수가 PATH 환경 변수에 사용하는 경우에는 OpenSSL libs와를 찾을 수없는 where.exe

답변:


9

확인 %ProgramFiles%하는 %ProgramFiles(x86)%당신을위한 작업에 변수 전환을 ENV :

장소 X32과 폴더와 해당로에서 OpenSSL 라이브러리의 64 버전 %programfiles%%ProgramFiles(x86)%디렉토리와의 PATH환경 변수는 통해이 폴더에 대한 참조를 사용하는 %programfiles%변수입니다.

이 방법으로 x32 비트 환경에서 실행하면 PATH항목 %programfiles%/OpenSSL/%ProgramFiles(x86)%/OpenSSL/디스크에서 자동으로 확인됩니다 .


1
글쎄, 나는 그것이 작동하는 데 어려움이 있습니다. echo %programfiles%실행되는 cmd.exe의 유형에 따라 다른 경로를 표시하지만 where ssleay32.dll두 가지 유형의 cmd.exe (32 비트 및 64 비트) 모두에서이 dll을 찾을 수없고 INFO: Could not find files for the given pattern(s).어떤 아이디어 가 표시 됩니까?
Piotr Dobrogost

도움이 될 수도 있습니다 : stackoverflow.com/questions/906310/…
Darokthar

1
dll 중 하나가 32 비트 파일 인 경우 64 비트 시스템에서는 C : \ windows \ syswow64 폴더로 이동해야합니다
romka

이것은 나를 위해 작동하지 않습니다. PATH 변수 정의에 % ProgramFiles %를 포함 시키면 전혀 확장되지 않으므로 exe가 dll을 찾지 못합니다.
Carlos A. Ibarra

7

romka가 제공 한 답변 (오른쪽으로 확인)은 간단하고 우아하지만 불행히도 작동하지 않습니다 (적어도 Windows 7 및 Windows 8 64 비트에서는 테스트를 더 이상 추진하지 않았습니다).

시스템 % PATH % 변수는 항상 다른 env 변수를 확장하지는 않습니다. 예를 들어 % SYSTEMDRIVE %에서는 작동하지만 불행히도 % PROGRAMFILES %에서는 작동하지 않습니다. Wikipedia 는이 동작이 간접적 인 수준에서 온다고 제안합니다 (% SYSTEMDRIVE %는 세 번째 env 변수를 참조하지 않습니다).

내가 찾은 유일한 해결책 은 주석에서 제안한 것처럼 File System Redirector 마술과 System32 / SysWoW64 디렉토리 를 사용하는 것 입니다.

일반적으로 유지 관리하기 어려운 Windows 디렉터리에 DLL을 직접 배포하지 않으려면 사용자 지정 디렉터리에 대한 소프트 링크를 대신 배포 할 수 있습니다 (Windows Vista 이상의 Windows 버전에서 작동).

그건 그렇고, 관련 게시물에 직접 댓글을 달지 않아 죄송합니다 : 현재 내 계정에 대한 평판이 충분하지 않습니다.


5

예, 절대적으로 가능합니다. .bat 파일 3 개만 작성하면됩니다. 첫 번째는 다음과 같아야합니다.

@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는 bin이라는 폴더에 배치되며 첫 번째 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"OPTION | OPTION이 x86 또는 ia64 인 경우

시작 : PATH | 여기서 PATH는 첫 번째 경로입니다.

이 스크립트는 Microsoft가 Visual Studio 환경에 적합한 명령 줄을 시작하는 데 사용하는 단순화 된 스크립트입니다. 이 스크립트를 N 환경으로 간단히 확장 할 수 있습니다. 다른 환경에 대해 .bat 파일을 더 추가하고 더 많은 옵션과 goto 문으로 first.bat를 편집합니다. 나는 그것이 스스로 설명하기를 바랍니다.

그리고 Microsoft가 스크립트 사용에 대해 고소하지 않기를 바랍니다.

편집하다:

아 내가 당신을 조금 오해 한 것 같아 32 비트 cmd 행의 경우 링크는 다음과 같이 작성되어야합니다.

대상 : % windir % \ SysWoW64 \ cmd.exe "PATH \ 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
명확성을 기하기 위해, Intel 64 비트 기술 (ia64-Itanium CPU)을 사용하지 않고 일반적으로 x64라고하는 AMD64 비트 기술을 사용하고 있음을 정정 할 수 있습니다.
Multiverse IT

답변 주셔서 감사합니다. 아이디어는 좋다. 그러나 %ProgramFiles%변수 를 수정하는 데 사용되는 것과 같은 일부 시스템 수준 솔루션을 찾고있었습니다 . (Quote : % ProgramFiles % 자체는 환경 변수를 요청하는 프로세스가 32 비트인지 64 비트인지에 따라 다릅니다 (Windows-on-Windows 64 비트 리디렉션으로 인한 것입니다). en.wikipedia.org/wiki/ … )
Piotr Dobrogost

1

Baptiste Chardon 의 답변에 제공된 링크를 따라 얻은 답변을 요약하고 싶었습니다 . 사용하여 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 비트 머신에서 환경 변수 회사 프로그램은 c:\program files64 비트 머신 c:\progra~2입니다. 그런 다음 사용자를위한 바로 가기를 설정합니다.%companyprograms%\...

그룹 정책이나 스크립트를 통해 수행 할 수 있습니다.


-1

롬 카가 후속 조치에 표시된 것처럼 간단한 대답은 SysWOW64 디렉토리입니다.

다행히 Shining Light 프로덕션 의 설치 관리자 가이를 처리합니다. 32 비트 및 64 비트 설치 프로그램을 실행하고 .DLL을 Window "System"디렉토리에 복사하도록 선택하면 .DLL에 적합한 디렉토리가 선택됩니다 (예 : 64 비트 .DLL은 System32로, 32 비트 .DLL은 SysWOW64로 이동).

이 작업을 완료하면 내 32 비트 앱이 32 비트 .DLL을 찾고 64 비트 앱이 64 비트 .DLL을 찾습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.