¿Es posible tener una PATH
variable de entorno completa o parcial específica para el tipo de imagen del proceso en ejecución (32 bits / 64 bits)? Cuando ejecuto alguna aplicación desde dentro de cmbit.exe de 64 bits, me gustaría que seleccione la versión de 64 bits de la biblioteca OpenSSL, mientras que cuando ejecuto alguna aplicación desde cmd.exe de 32 bits, me gustaría que seleccione la versión de 32 bits de la biblioteca OpenSSL.
14
echo %programfiles%
muestra una ruta diferente según el tipo de cmd.exe desde el que se ejecuta, perowhere ssleay32.dll
en ambos tipos de cmd.exe (32 bits y 64 bits) no puedo encontrar este archivo DLL y muestra ¿INFO: Could not find files for the given pattern(s).
Alguna idea?La respuesta (marcada como correcta) proporcionada por romka es simple y elegante, pero desafortunadamente no funciona (al menos en Windows 7 y Windows 8 de 64 bits, no adelanté mi prueba).
El problema proviene del hecho de que la variable% PATH% del sistema no siempre expande otra variable env: funciona con% SYSTEMDRIVE% por ejemplo, pero desafortunadamente no para% PROGRAMFILES%. Wikipedia sugiere que este comportamiento proviene del nivel de indirección (% SYSTEMDRIVE% no se refiere a una tercera variable env).
La única solución que encontré es usar la magia Redirector del sistema de archivos y los directorios System32 / SysWoW64, como se sugiere en los comentarios.
Para evitar la implementación directa de archivos DLL en el directorio de Windows, que generalmente es difícil de mantener, se puede implementar un enlace suave a un directorio personalizado (funciona en Windows Vista y versiones posteriores de Windows):
Por cierto, perdón por no comentar directamente sobre las publicaciones relevantes: actualmente no tengo suficiente reputación en mi cuenta para hacer esto.
fuente
Sí, es absolutamente posible. Simplemente escriba tres archivos .bat. El primero debería verse así:
El segundo y el tercer archivo .bat son básicamente iguales, excepto que difieren en su nombre. El primero se llamará x86.bat, el segundo ia64.bat y se colocarán en una carpeta llamada bin que se encuentra sobre el primer archivo bat. Tendrás esto:
El contenido del segundo y tercer archivo .bat debería verse así:
Puede crear un enlace al primer archivo .bat que tendrá la siguiente configuración:
Objetivo:% comspec% / k "PATH \ first.bat" OPCIÓN | Donde OPTION es x86 o ia64
Comience en: RUTA | Donde PATH es el camino a tu primer.bat
El script es el script simplificado que Microsoft usa para iniciar la línea de comando correcta para su entorno de Visual Studio. Simplemente podría expandir estos scripts a N entornos. Al agregar más archivos .bat para diferentes entornos y al editar first.bat con más opciones y declaraciones goto. Espero que se explique por sí mismo.
Y espero que Microsoft no me demande por usar su script.
EDITAR:
Ah, creo que te he entendido mal un poco. Para la línea cmd de 32 bits, el enlace debe crearse como:
Objetivo:% windir% \ SysWoW64 \ cmd.exe "PATH \ first.bat" x86
EDIT2:
Intenta algo como:
fuente
%ProgramFiles%
variable. (Cita: El% ProgramFiles% en sí mismo depende de si el proceso que solicita la variable de entorno es en sí mismo de 32 bits o de 64 bits (esto es causado por la redirección de Windows-on-Windows de 64 bits). En.wikipedia.org/wiki/ ... )Solo quería resumir la respuesta que obtuve siguiendo los enlaces provistos en la respuesta de Baptiste Chardon. Al usar la
mklink
herramienta de línea de comandos para crear un enlace simbólico de directorio dentroC:\Windows\system32
y dentroC:\Windows\SysWOW64
, cada uno con el mismo nombre (aunque diferentes objetivos), puede agregar el unoC:\Windows\system32
a laPath
variable de entorno. Por ejemplo:fuente
He tenido este problema y la respuesta es la siguiente:
La ruta para su variable de sistema en las máquinas de 64 bits es
c:\progra~2
. Debe tener una ruta sin espacio para su variable de entorno, de lo contrario, el sistema no leerá másC:\programs
.En nuestras máquinas de 32 bits, los programas de empresa variables de entorno son
c:\program files
y en los de 64 bits suc:\progra~2
. Luego configuramos nuestros atajos para que los usuarios%companyprograms%\...
Puede hacerlo a través de la política de grupo o por script.
fuente
Como Romka indicó en el seguimiento, la respuesta simple es el directorio SysWOW64.
Afortunadamente, los instaladores de Shining Light productions se encargan de esto por usted. Simplemente ejecute los instaladores de 32 bits y 64 bits y seleccione copiar los .DLL en el directorio "Sistema" de Windows y se elige el directorio apropiado para los .DLL (es decir, los .DLL de 64 bits entran en System32 y los .DLL de 32 bits entran en SysWOW64.
Una vez que hice esto, mis aplicaciones de 32 bits encuentran los .DLL de 32 bits y mis aplicaciones de 64 bits encuentran los .DLL de 64 bits.
fuente