¿Cómo se agrega una variable de entorno de Windows sin reiniciar?

181

Me gustaría agregar una variable de entorno a una máquina con Windows (escritorio o servidor) y poder usarla sin reiniciar esa máquina.

Supongamos que tiene un servidor de producción que aloja una variedad de aplicaciones y una nueva aplicación necesita una variable de entorno particular para ejecutarse. No desea reiniciarlo mientras los usuarios están conectados a sus otras aplicaciones. ¿Qué opciones tienes? No me gusta la opción de esperar hasta un buen momento para reiniciar. Debe haber una mejor manera. ¿Qué me estoy perdiendo?

Chad Braun-Duin
fuente
2
Tuve el mismo problema. Leí en alguna parte que matar el proceso explorer.exe actualizaría las variables y funcionó. Entonces solo tuve que ejecutar el explorador desde el administrador de tareas.
user19694
1
Debe cerrar el símbolo del sistema y volver a abrirlo para que las variables de ruta se actualicen. Las variables se cargan cuando comienza cmd.
NiLInfinite

Respuestas:

162

Los cambios en las variables de entorno deben tener efecto de inmediato, si realiza el cambio a través del cuadro de diálogo principal de Propiedades para la computadora en cuestión (vaya a Mi PC | Propiedades | Avanzado | Variables de entorno). Después de guardar los cambios, Explorer transmite un WM_SETTINGCHANGEmensaje a todas las ventanas para informarles sobre el cambio. Cualquier programa generado a través de Explorer después de esto debería obtener el entorno actualizado, aunque los programas que ya se ejecutan no lo harán, a menos que manejen el mensaje de cambio de configuración.

No puedo decir a partir de la descripción de su problema qué problema específico tiene con esto. ¿Puede contarnos más sobre el escenario específico que no funciona?

Este artículo de KB también puede ser útil: Cómo propagar variables de entorno al sistema

Charlie
fuente
2
Ok, supongo que debo haber visto este comportamiento en un servicio en ejecución o algo así. Agregué una nueva variable de entorno utilizando el método descrito anteriormente. Entonces, yo era capaz de ver el valor después de la apertura de una nueva línea de comandos y usando el comando "echo% <mivar>% gracias a ambos por sus respuestas..
Chad Braun-Duin
55
Para los usuarios de PowerShell, este fragmento puede ser de ayuda: poshcode.org/2049
Anders Zommarin
8
Si usa cmd, debe reiniciarlo si cambia la variable env
Neil McGuigan el
44
Acabo de instalar Scala en mi PC pero el PATH no se actualizó; presumiblemente, el MSI no transmitió el mensaje WM_SETTINGCHANGE. Agregué una variable de SISTEMA ficticio, es decir, CHANGE_TO_UPDATE = z, que actualizo para activar el mensaje WM_SETTINGCHANGE - problema resuelto
Darren Bishop
3
404 para el enlace :-(
Samoth
63
  1. En un símbolo del sistema, escriba: runas /user:yourusername@yourdomain cmd
  2. Se abrirá un nuevo indicador de cmd, luego escriba: taskkill /f /im explorer.exe
  3. Luego escriba: explorer.exe

Ahora, después de cerrar todas las solicitudes de comando, verá que la PATHvariable se ha actualizado realmente.

Todas las indicaciones de comando deben estar cerradas. Vuelva a abrir un nuevo símbolo del sistema, escriba path y verá los nuevos datos.

Ron y Kim Stengel
fuente
66
De todas las respuestas en esta página, esta es la única que realmente funcionó para mí. ¡¡Gracias!!
coredumperror
2
Esto funcionó para mí. Creo que el problema es que si ejecuta cmd a través del explorador (para evitar tener que escribir rutas largas), el explorador nunca se cierra, incluso si cierra todas las ventanas del explorador. Gracias por la solución :)
Steve Mc
Trabajó para mi. También puede usar el Administrador de tareas para eliminar las tareas del explorador y reiniciarlo (Archivo> Ejecutar nueva tarea).
adabyron
77
Uhh No elimine Windows Explorer a menos que se bloquee uno de sus procesos. En su lugar, abra el cuadro de diálogo de las ventanas de apagado y cancélelo mientras lo mantiene presionado ctrl+alt+shift. Eso saldrá limpiamente de Windows Explorer. En Vista +, el cuadro de diálogo de cierre de Windows es más difícil de encontrar (pero aún está presente, al menos hasta el 7 (no está seguro sobre 8 y 10)), por lo que hay un segundo método. ctrl + shift + clic derecho en una parte vacía del menú de inicio y elija salir del explorador. En 8, la opción de salida es la misma, pero utiliza la barra de tareas, no el menú de inicio.
Kevin Cathcart
1
+1 Esto funciona como un encanto en Windows 7. Para su información, simplemente utilicé CTRL + ALT + MAYÚS y desde el Administrador de tareas de Windows eliminé todo el proceso explorer.exe y luego lo comencé nuevamente presionando el botón Nueva tarea .
Marco Demaio
19

Una cosa a tener en cuenta es que muchos programas obtienen las variables de entorno cuando se inician por primera vez, por lo que si bien Windows no necesita reiniciar, algunos programas pueden hacerlo antes de poder usar las nuevas variables. Un buen ejemplo de esto es tener que abrir una nueva ventana de símbolo del sistema después de agregar una RUTA (sí, me he tropezado con esto).

nedm
fuente
3
Este problema afecta a TODOS LOS SERVICIOS, incluso un servicio reiniciado no verá nuevas variables de entorno.
gimel
1
¿Estás seguro de que no es por compartir un proceso de svchost?
Mark Sowul
16

Si bien no tengo suficiente reputación para comentar sobre la respuesta más votada a esta pregunta, me gustaría decir que no es exactamente correcta. Sé esto porque no importa qué solución probé en esta publicación, nada realmente funcionó.

El artículo de kb vinculado a esa respuesta en realidad afirma que:

Sin embargo, tenga en cuenta que las modificaciones a las variables de entorno no resultan en un cambio inmediato. Por ejemplo, si inicia otro símbolo del sistema después de realizar los cambios, las variables de entorno reflejarán los valores anteriores (no los actuales). Los cambios no surten efecto hasta que cierre la sesión y luego vuelva a iniciarla.

La parte sobre el restablecimiento de las variables de entorno a los valores anteriores después de volver a cargar el símbolo del sistema es exactamente lo que experimenté en Windows Server 2008.

El artículo continúa diciendo:

Para efectuar estos cambios sin tener que cerrar sesión, transmita un mensaje WM_SETTINGCHANGE a todas las ventanas del sistema, de modo que cualquier aplicación interesada (como el Explorador de Windows, el Administrador de programas, el Administrador de tareas, el Panel de control, etc.) pueda realizar una actualización.

Eso no implica que Explorer difunda un mensaje WM_SETTINGCHANGE una vez que haya cambiado las variables de entorno del sistema, o que realmente funcione. No estoy seguro de cómo haría lo que se sugiere en el artículo de KB (para propagar los cambios inmediatamente) desde el símbolo del sistema.

testworks
fuente
1
Esta es la única respuesta correcta para mí. Ninguno de los otros, incluyendo matar a Explorer de la manera difícil o "apropiada", hace la diferencia.
Hashim
4

Haz el env. variable disponible de inmediato:

1. Open a shell

Dependiendo de la variable de entorno que desee cambiar, haga lo siguiente: (suponga que desea agregar una nueva RUTA para una aplicación instalada recientemente) Entonces, en el símbolo del sistema, escriba lo siguiente:

2. PATH=%PATH%;C:\type\your\new\path\here

verifique que su nueva ruta se haya agregado a la variable de entorno

3. echo %PATH%

Hecho.

Hacer que la variable esté disponible al reiniciar

1. Press WinLogoKey+Pause/Break
2. On the left pane, press 'Advanced System Settings'
3. On the 'Advanced' tab, click 'Environment Variables'
4. In 'System Variables' choose the one you want to modify
5. Click Ok

Probado y trabajando en Windows 7/10

Pedro Sousa
fuente
3

Una posible solución para los servicios es ejecutarlos temporalmente como otro usuario (que no sea LocalSystem, LocalService, NetworkService). Por ejemplo, para el servicio Apache, esto funciona sin ningún problema. Para cambiar la cuenta de servicio, abra la consola services.msc, seleccione servicio, haga clic en propiedades del servicio y en la segunda pestaña ingrese las credenciales de inicio de sesión para un usuario. Reinicie el servicio y sus variables de entorno deben estar actualizadas.

Si se trata de un usuario que ha iniciado sesión, debería funcionar sin problemas. Si está utilizando una cuenta de usuario actual, también puede ser necesario reiniciar explorer.exe. También tenga en cuenta que la ejecución de servicios como cuenta de usuario normal puede crear riesgos de seguridad.

Odin
fuente
1

Como la gente aún no ha agregado esta respuesta, quería mencionar que puede establecer variables de sistema permanentes que sobrevivan al reinicio con el comando SETX.

p.ej

setx PATH "%PATH%;c:\temp\my\new\path"

Tenga en cuenta que lo anterior no funcionará en la ventana de comandos actual y requerirá que abra una nueva ventana de comandos antes de que surta efecto. Como resultado, dependiendo del caso de uso; Es posible que deba combinar esto con una de las otras técnicas anteriores.

Consulte la siguiente URL para obtener detalles adicionales :

Doug
fuente
no funciona: / "sintaxis no válida"
Joe DF
1
Probar ahora. Aparentemente necesitaba comillas dobles.
Doug
Gracias, sí, pensé ... excepto que recibo una advertencia de truncamiento, así que no puedo agregarle nada ... :(
Joe DF