Можно ли иметь всю или часть PATH
переменной среды, специфичной для типа образа запущенного процесса (32-бит / 64-бит)? Когда я запускаю какое-то приложение из 64-битного cmd.exe, я хотел бы, чтобы оно выбирало 64-битную версию библиотеки OpenSSL, тогда как когда я запускаю какое-то приложение из 32-битного cmd.exe, я хотел бы, чтобы оно выбирало 32-битную версию библиотеки OpenSSL.
14
echo %programfiles%
показывает разные пути в зависимости от типа cmd.exe, из которого он запущен, ноwhere ssleay32.dll
в обоих типах cmd.exe (32-битный и 64-битный) не может найти эту DLL и отображаетINFO: Could not find files for the given pattern(s).
какие-либо идеи?Ответ (проверенный как правильный), предоставленный romka, прост и элегантен, но, к сожалению, не работает (по крайней мере, в Windows 7 и Windows 8 64 бит, я не продвинул свой тест дальше).
Проблема заключается в том, что системная переменная% PATH% не всегда раскрывает другую переменную env: она работает, например, с% SYSTEMDRIVE%, но, к сожалению, не с% PROGRAMFILES%. Википедия предполагает, что это поведение происходит от уровня косвенности (% SYSTEMDRIVE% не относится к третьей переменной env).
Единственное решение, которое я нашел, - это использование магии перенаправителя файловой системы и каталогов System32 / SysWoW64, как предлагается в комментариях.
Чтобы избежать прямого развертывания библиотек DLL в каталоге Windows, который обычно сложно поддерживать, вместо этого можно развернуть программную ссылку на пользовательский каталог (работает в Windows Vista и более поздних версиях Windows):
Кстати, извините за то, что не комментировал непосредственно соответствующие посты: в настоящее время на моем аккаунте недостаточно репутации, чтобы сделать это.
источник
Да, это абсолютно возможно. Просто напишите три .bat файла. Первый должен выглядеть так:
Второй и третий файл .bat в основном одинаковы, за исключением того, что они различаются по имени. Первый будет называться x86.bat, второй - ia64.bat, и они будут помещены в папку bin, которая находится над первым файлом bat. У вас будет это:
Содержимое второго и третьего файла .bat должно выглядеть так:
Вы можете создать ссылку на первый файл .bat, который будет иметь следующие настройки:
Цель:% comspec% / k "PATH \ first.bat" ОПЦИЯ | Где опция - x86 или ia64
Начало в: ПУТЬ | Где PATH - это путь к вашему first.bat
Сценарий - это упрощенный сценарий, который Microsoft использует для запуска правильной командной строки для своей среды Visual Studio. Вы можете просто расширить эти сценарии для N сред. Добавляя больше .bat файлов для разных сред и редактируя first.bat с большим количеством опций и операторов goto. Я надеюсь, что это само за себя.
И я надеюсь, что Microsoft не предъявляет мне иск за использование их сценария.
РЕДАКТИРОВАТЬ:
Ах, я думаю, что я вас немного не понял. Для 32-битной строки cmd ссылка должна быть создана как:
Цель:% windir% \ SysWoW64 \ cmd.exe "PATH \ first.bat" x86
EDIT2:
Попробуйте что-то вроде:
источник
%ProgramFiles%
переменной. (Цитата:% ProgramFiles% сам зависит от того, является ли процесс, запрашивающий переменную среды, самим 32-разрядным или 64-разрядным (это вызвано 64-разрядным перенаправлением Windows-on-Windows). En.wikipedia.org/wiki/ … )Я хотел просто суммировать ответ, который я получил, перейдя по ссылкам, приведенным в ответе от Батиста Шардона. Используя
mklink
инструмент командной строки для создания каталога символической ссылки вC:\Windows\system32
и вC:\Windows\SysWOW64
, каждый из которых имеет такое же имя (хотя разные цели), вы можете просто добавить один вC:\Windows\system32
кPath
переменному окружению. Например:источник
У меня была эта проблема, и ответ таков:
Путь к вашей системной переменной на 64 - битных машин
c:\progra~2
. У вас должен быть свободный путь для вашей переменной среды, иначе система не будет читать дальшеC:\programs
.На наших 32-битных машинах переменная окружения companyprograms есть,
c:\program files
а на 64-битных - ееc:\progra~2
. Затем мы устанавливаем наши ярлыки для пользователей%companyprograms%\...
Вы можете сделать это через групповую политику или по сценарию.
источник
Как указывает romka в последующем, простой ответ - это каталог SysWOW64.
К счастью, инсталляторы от Shining Light позаботятся об этом за вас. Просто запустите 32-битные и 64-битные установщики и выберите, чтобы скопировать файлы .DLL в каталог «System» окна, и для файлов .DLL будет выбран правильный каталог (т. Е. 64-битные файлы .DLL попадают в System32, а 32-битные файлы .DLL попадают в SysWOW64.
После этого мои 32-битные приложения находят 32-битные .DLL, а мои 64-битные приложения - 64-битные .DLL.
источник