Я установил как 32-битную, так и 64-битную версию OpenSSL libs на Vista x64. 32-битная версия была установлена в c:\Program Files (x86)\OpenSSL а 64-битная версия была установлена в c:\Program Files\OpenSSL . Затем я добавил запись %ProgramFiles%\OpenSSL в переменную среды PATH . %ProgramFiles%\OpenSSL расширен до c:\Program Files (x86)\OpenSSL для 32-битных программ и расширен до c:\Program Files\OpenSSL для 64-битных программ. Идея состоит в том, чтобы 32-битные программы использовали 32-битные версии библиотек OpenSSL, а 64-битные - 64-битные. Я хотел проверить, работает ли это, запустив 32-битный cmd.exe и выполнив команду where ssleay32.dll а затем запустив 64-битный cmd.exe и выполнив то же самое. Однако в обоих случаях я получаю ошибку INFO: Could not find files for the given pattern(s).
В чем дело?

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

3 ответа3

1

Поставь 32бит.Библиотеки DLL в каталог \Windows \SysWOW64 и 64-битные библиотеки DLL в каталог \Windows \system32.

РЕДАКТИРОВАТЬ:

Может быть, это поможет:

Это просто разумное предположение, но после некоторого исследования я считаю, что нашел проблему:

Если определение переменной окружения var1 содержит другую переменную окружения var2, а имя var1 в алфавитном порядке меньше, чем имя var2 (т.е. strcmp (var1, var2) <0), тогда var2 не будет расширен. Похоже, это происходит потому, что когда Windows сначала устанавливает переменные среды, они создаются в алфавитном порядке, поэтому var2 не существует до тех пор, пока var1 не будет создан (и, следовательно, расширение не может быть выполнено).

Я считаю, что это ограничение в Windows. На самом деле должна быть проведена какая-то проверка зависимостей между переменными, чтобы они создавались в правильном порядке. К счастью, есть обходной путь.

1) Включите "отложенное расширение переменной" в реестре (см. Http://batcheero.blogspot.com/2007/06/how-to-enabledelayedexpansion.html).

2) Поменяйте знаки '%' вокруг var2 на '!', например, "% var2%" становится "!var2!"

Я провел ограниченное тестирование на Windows 7, и это, похоже, решило проблему.

Это отсюда: http://social.answers.microsoft.com/Forums/en-US/vistainstall/thread/48b23109-9fbc-47c5-a5d1-465773f94704

1

Корень проблемы: "алфавитная" ерунда в Windows (то есть envvar1 не раскрывается в другом envvar2 если envvar2 "идет первым" в алфавитном порядке).

Мой обходной путь: забудьте об использовании %ProgramFiles% полностью, даже с отложенным расширением переменной. Вместо этого создайте другой envvar с именем _ProgFiles или аналогичным: подчеркивание будет означать, что все остальные envvars, следующие за ним по алфавиту, будут использовать его как должным образом расширенный ...

Так что ваш путь будет читать ... ;%_ProgFiles%\OpenSSL;... или что-то в этом роде.

1

Кажется, Гаррим прав

Я думаю, что вы очень убедительно доказали, что% ProgramFiles% не работает должным образом в PATH.

Странно то, что я не могу найти информацию об этой проблеме с помощью Google ...

Решение, которое я выбрал, вдохновлено идеей в ответе Дароктара;
Я символически
c:\windows\system32\OpenSSL-bin to c:\Program Files\OpenSSL\bin
а также
c:\windows\SysWOW64\OpenSSL-bin to c:\Program Files (x86)\OpenSSL\bin
и добавил c:\windows\system32\OpenSSL-bin в PATH.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .