Различная переменная среды PATH для 32-битной и 64-битной Windows – возможно ли это?

Возможно ли иметь всю или часть PATH окружения PATH специфичную для типа образа рабочего процесса (32 бит / 64 бит)? Когда я запускаю некоторое приложение из 64-битного cmd.exe, я хотел бы, чтобы он выбрал 64-битную версию библиотеки OpenSSL, тогда как когда я запускаю какое-либо приложение из 32-разрядного cmd.exe, я хотел бы, чтобы он выбрал 32-битную версию библиотеки OpenSSL.

СЛЕДОВАТЬ ЗА
Where.exe не находит библиотеки OpenSSL, когда переменная% ProgramFiles% используется в переменной среды PATH

  • Есть ли команда windows, которая возвращает список процессов 64 и 32?
  • Невозможно открыть IE 10 в 32-битном режиме
  • Объединение файлов «Program Files» и «Program Files (x86)» в Windows 7 64-разрядных
  • Как получить 32-разрядные драйверы для ноутбуков HP с 15-g201nx?
  • Internet Explorer 9 сразу закрывается при запуске
  • Почему 32-разрядная Windows XP может адресовать только 3 ГБ
  • Учетная запись администратора предотвращает возврат Windows 10 до 8.1
  • Диалог «Выбор программы по умолчанию» не отображается после выбора «Открыть» с записью в контекстном меню
  • Как удалить метаданные всех файлов в папке и вложенных папках?
  • Как я могу освободить место на диске из папки установщика Windows, не убивая Windows?
  • Жесткий диск 750Gig показывает полнофункциональный только 315Gigs
  • Как загрузить и запустить версию USBView для Windows (устройство просмотра USB-устройств)?
  • 6 Solutions collect form web for “Различная переменная среды PATH для 32-битной и 64-битной Windows – возможно ли это?”

    Сделать %ProgramFiles% to %ProgramFiles(x86)% Переменная %ProgramFiles(x86)% env переключается на работу для вас:

    Поместите папки с библиотеками OpenSSL на x32 и x64 в соответствующие %programfiles% и %ProgramFiles(x86)% и в PATH среды PATH , используйте ссылку на эти папки с помощью переменной %programfiles% .

    Таким образом, когда вы работаете в x32-разрядной среде, ваша запись PATH %programfiles%/OpenSSL/ автоматически будет разрешена для %ProgramFiles(x86)%/OpenSSL/ на диске.

    Да, это абсолютно возможно. Просто напишите три файла .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, и они помещаются в папку с именем 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" ОПЦИЯ | Где ОПЦИЯ – x86 или ia64

    Начало работы: PATH | Где PATH – это PATH для вашего first.bat

    Скрипт – это упрощенный сценарий, который Microsoft использует для запуска правильной командной строки для среды Visual Studio. Вы можете просто расширить эти сценарии до N окружений. Добавляя больше .bat-файлов для разных сред и редактируя first.bat с большим количеством опций и операторов goto. Надеюсь, это объяснение.

    И я надеюсь, что 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 

    Ответ (проверенный как правильно), предоставленный romka, прост и изящный, но, к сожалению, не работает (по крайней мере, в Windows 7 и Windows 8 64 бит, я не продвигал свой тест дальше).

    Проблема возникает из-за того, что переменная system% PATH% не всегда расширяет другую переменную env: она работает, например, с% SYSTEMDRIVE%, но, к сожалению, не для% PROGRAMFILES%. Википедия предполагает, что это поведение происходит от уровня косвенности (% SYSTEMDRIVE% не относится к третьей переменной env).

    Единственным решением, которое я нашел, является использование магии Redirector файловой системы и каталогов System32 / SysWoW64, как это предлагается в комментариях.

    Чтобы избежать прямого развертывания библиотек DLL в каталоге Windows, который обычно трудно поддерживать, можно развернуть вместо него программную ссылку на пользовательский каталог (работает в Windows Vista и более поздних версиях Windows):

    Кстати, извините за то, что не комментируете непосредственно соответствующие должности: в настоящее время недостаточно репутации на моей учетной записи, чтобы сделать это.

    У меня была эта проблема, и ответ таков:

    Путь для вашей системной переменной на 64-битных машинах – c:\progra~2 . Вам необходимо иметь пробельный путь для вашей переменной окружения, иначе система не будет читать дальше, чем C:\programs .

    На наших 32-битных машинах переменная companyprograms среды – это c:\program files а на 64-битных – c:\progra~2 . Затем мы устанавливаем наши ярлыки для пользователей в %companyprograms%\...

    Вы можете сделать это с помощью групповой политики или сценария.

    Я хотел просто суммировать полученный ответ, следуя ссылкам, приведенным в ответе от Baptiste Chardon. Используя инструмент командной строки mklink для создания символической ссылки каталога в C:\Windows\system32 и в C:\Windows\SysWOW64 , каждый из которых имеет одно и то же имя (хотя разные цели), вы можете просто добавить его в C:\Windows\system32 в переменную окружения Path . Например:

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

    Как указано romka в следующем порядке, простым ответом является каталог SysWOW64.

    К счастью, установщики из Shining Light производят заботу об этом для вас. Просто запустите 32-битные и 64-битные инсталляторы и выберите для копирования .DLLs в каталог «System» Windows, и соответствующий каталог выбран для .DLL (то есть 64-разрядные DLL-файлы входят в System32, а 32-разрядные DLL-файлы входят в SysWOW64.

    Как только я это сделал, мои 32-разрядные приложения нашли 32-разрядные DLL, а 64-разрядные приложения нашли 64-разрядные DLL-файлы.

    Давайте будем гением компьютера.