Tengo derechos elevados para mi computadora portátil, pero no derechos de administrador. Se requieren derechos de administrador para modificar las variables de entorno del sistema. Esperaba que si creaba una variable de entorno de usuario con el mismo nombre que una variable de entorno del sistema, la variable de usuario anularía la variable del sistema, pero este no parece ser el caso.
Después de agregar una variable de usuario con el mismo nombre que una variable del sistema, abrí una nueva ventana de cmd y usé el comando echo para mostrar la variable. Me mostró el valor de la variable del sistema en lugar del valor de la variable de usuario.
Solo quería confirmar que este es un comportamiento esperado y entender el razonamiento detrás de esto. Esperaría que la configuración de usuario más específica anule la del sistema.
Tengo Windows 7
Respuestas:
De acuerdo con el artículo de MSKB Variables de entorno en Windows NT :
Una excepción notable es la
PATH
variable, que es un resultado combinado del sistema y las variables de usuario:El artículo también analiza excepciones idénticas para la expansión de las variables
LibPath
yOs2LibPath
, así como también cómoautoexec.bat
se manejan las especificadas en . Es probable que estos puntos encuentren poca relevancia en los entornos típicos de hoy.Crédito a esta respuesta SO
fuente
Todo lo que Twisty Impersonator dijo en su respuesta es correcto. Se ha resaltado la idea de que la variable de ruta del usuario se ha agregado, y creo que las consecuencias de esa diferencia requieren un tratamiento adicional.
Cuando se ejecuta un programa ejecutable (o cualquier secuencia de comandos ejecutables, tales como
.bat
,.vbs
, etc.) que no es necesario para proporcionar la ruta completa.Por ejemplo, para ejecutar
java
, puede escribir cualquiera de estos:El primer ejemplo usa una ruta totalmente calificada. Esto siempre usará la versión de Java en esa ruta exacta.
El segundo ejemplo pasará por cada uno de los directorios en la
%Path%
variable de entorno, buscando un archivo ejecutable llamadojava.exe
. Ejecutará el primero que se encuentre y dejará de buscar. Si hay dos archivos nombrados enjava.exe
algún lugar del%Path%
, solo se usa el primero encontrado.El tercer ejemplo, como el segundo, iterará sobre los directorios listados en
%Path%
. Además, debido a que no se proporcionó una extensión de archivo, se agrega una lista de extensiones de archivo ejecutables al nombre del archivo, en el orden especificado en la%PATHEXT%
variable de entorno. Si hay varios archivos con el nombrejava.com
,java.exe
,java.bat
, etc. algún lugar de la%Path%
, sólo se utiliza el primero encontrado.Puede ver la lista de extensiones de ruta ejecutables en su sistema creando el siguiente archivo por lotes:
En mi máquina, estos son:
¿Qué significa todo esto?
En marcado contraste con otras variables de entorno, la ruta del usuario no le permite anular la ruta del sistema. Todo lo contrario es el caso. De los ejemplos anteriores, hay muchos casos en los que puede cambiar la versión predeterminada de Java. Sin embargo, si ya hay una versión de Java listada en la ruta del sistema, esa es la versión que SIEMPRE se encontrará primero, porque la ruta se busca en orden, de izquierda a derecha, y la ruta del usuario se agrega a la derecha a mano, con la ruta del sistema a la izquierda.
¿Qué puedo hacer al respecto?
Si no tiene acceso a las variables de entorno del sistema, no puede anular los programas predeterminados en la ruta del sistema utilizando la ruta del usuario. (De hecho, debe ser de esta manera, o ciertos programas dejarían de funcionar correctamente y abrirían su sistema a la manipulación por software malicioso. Nadie lo quiere).
En su lugar, debe usar una ruta totalmente calificada si debe usar una versión específica.
fuente