32 位和 64 位 Windows 的不同 PATH 环境变量 - 可能吗?

Pio*_*ost 14 windows 64-bit path environment-variables 32-bit

是否可以拥有PATH特定于正在运行的进程映像类型(32 位/64 位)的全部或部分环境变量?当我从 64 位 cmd.exe 中运行某个应用程序时,我希望它选择 64 位版本的 OpenSSL 库,而当我从 32 位 cmd.exe 中运行某个应用程序时,我希望它选择 32 位版本的 OpenSSL 库。

跟进
where.exe没有找到的OpenSSL库时的%ProgramFiles%变量PATH环境变量用来

小智 9

%ProgramFiles%%ProgramFiles(x86)%环境变量转换为你工作:

与X32的地方文件夹和64个版本OpenSSL库到合适%programfiles%%ProgramFiles(x86)%目录,并在PATH环境变量,通过使用这些文件夹的引用%programfiles%变量。

这样,当您在 x32 位环境中运行时,您的PATH条目%programfiles%/OpenSSL/将自动解析到 %ProgramFiles(x86)%/OpenSSL/磁盘上。


Bap*_*don 7

romka 提供的答案(检查为正确)简单而优雅,但不幸的是不起作用(至少在 Windows 7 和 Windows 8 64 位上,我没有进一步推动我的测试)。

问题来自这样一个事实,即系统 %PATH% 变量并不总是扩展其他 env 变量:例如,它适用于 %SYSTEMDRIVE%,但不幸的是不适用于 %PROGRAMFILES%。维基百科建议这种行为来自间接级别(%SYSTEMDRIVE% 不引用第三个环境变量)。

我找到的唯一解决方案是使用文件系统重定向器魔法和目录 System32/SysWoW64,如评论中所建议的。

为了避免在 Windows 目录中直接部署 DLL,这通常很难维护,可以将软链接部署到自定义目录(适用于 Windows Vista 和更高版本的 Windows):

顺便说一句,很抱歉没有直接对相关帖子发表评论:目前我的帐户上没有足够的声誉来做到这一点。


Dar*_*har 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
Run Code Online (Sandbox Code Playgroud)

第二个和第三个 .bat 文件基本相同,只是名称不同。第一个将被称为 x86.bat 第二个 ia64.bat,它们被放置在一个名为 bin 的文件夹中,该文件夹位于第一个 bat 文件上方。你会有这个:

PATH\first.bat
PATH\bin\x86.bat
PATH\bin\ia64.bat
Run Code Online (Sandbox Code Playgroud)

第二个和第三个 .bat 文件的内容应如下所示:

@set PATH=THE PATH YOU WANT
Run Code Online (Sandbox Code Playgroud)

您可以创建指向第一个 .bat 文件的链接,该文件将具有以下设置:

目标:%comspec% /k "PATH\first.bat" 选项 | 其中 OPTION 是 x86 或 ia64

开始于: PATH | 其中 PATH 是你的 first.bat 的路径

该脚本是 Microsoft 用于为其 Visual Studio 环境启动正确命令行的简化脚本。您可以简单地将此脚本扩展到 N 个环境。通过为不同的环境添加更多 .bat 文件,并通过使用更多选项和 goto 语句编辑 first.bat。我希望它是自我解释。

我希望微软不要因为我使用他们的脚本而起诉我。

编辑:

啊,我想我有点误解你了。对于 32 位 cmd 行,链接应创建为:

目标:%windir%\SysWoW64\cmd.exe "PATH\first.bat" x86

编辑2:

尝试类似:

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
Run Code Online (Sandbox Code Playgroud)