203 votos

¿Cómo se añade una variable de entorno de Windows sin reiniciar?

Me gustaría añadir una variable de entorno a una máquina Windows (escritorio o servidor) y poder utilizarla sin reiniciar dicha máquina.

Digamos que tienes un servidor de producción que alberga una variedad de aplicaciones y una nueva aplicación necesita una variable de entorno particular para ejecutarse. No quieres reiniciarla mientras los usuarios están conectados a tus otras aplicaciones. ¿Qué opciones tienes? No me gusta la opción de esperar hasta que sea un buen momento para reiniciar. Debe haber una forma mejor. ¿Qué me falta?

2 votos

Yo tuve este mismo problema. Leí en algún sitio que matando el proceso explorer.exe se actualizarían las variables y funcionó. Luego solo tuve que ejecutar explorer desde el administrador de tareas.

3 votos

Tiene que cerrar el símbolo del sistema y volver a abrirlo para que las variables de ruta se actualicen. Las variables se cargan cuando se inicia cmd.

0 votos

Abrir un nuevo cmd usando el administrador de tareas o la ventana del explorador no funciona (al menos con Win10), pero usando el menú de inicio y escribiendo cmd y luego la comprobación de la variable funciona.

179voto

Charlie Puntos 1206

Los cambios en las variables de entorno deberían surtir efecto inmediatamente, si los realiza a través del cuadro de diálogo principal de Propiedades del ordenador en cuestión (vaya a Mi PC | Propiedades | Avanzadas | Variables de entorno). Después de guardar los cambios, el Explorador emite un WM_SETTINGCHANGE mensaje a todos los Windows para informarles del cambio. Cualquier programa que se genere a través del Explorador después de esto debería obtener el entorno actualizado, aunque los programas que ya se estén ejecutando no lo harán, a menos que manejen el mensaje de cambio de configuración.

No soy capaz de decir por la descripción de su problema qué problema específico está teniendo con esto. ¿Puede decirnos más sobre el escenario específico que no está funcionando?

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

3 votos

Ok, supongo que debo haber visto este comportamiento en un servicio en funcionamiento o algo así. Añadí una nueva variable de entorno utilizando el método descrito anteriormente. Luego, pude ver el valor después de abrir un nuevo símbolo del sistema y usar el comando "echo %<myvar>%. Gracias a ambos por sus respuestas.

5 votos

Para los usuarios de PowerShell este fragmento puede ser de ayuda: poshcode.org/2049

9 votos

Si se usa cmd, hay que reiniciarlo si se cambia la variable env

80voto

  1. En una línea de comandos escriba: runas /user:yourusername@yourdomain cmd
  2. Se abrirá un nuevo indicador de cmd, entonces escriba: taskkill /f /im explorer.exe
  3. Entonces escribe: explorer.exe

Ahora, después de cerrar todos los avisos de comando, verá que el PATH variable ha sido realmente actualizada.

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

6 votos

De todas las respuestas de esta página, ésta es la única que realmente me ha funcionado. ¡¡¡Gracias!!!

2 votos

Esto me ha funcionado. Creo que el problema es que si ejecutas cmd a través del explorador (para ahorrarte tener que escribir rutas largas) entonces el explorador nunca se cierra, aunque cierres todas las ventanas del explorador. Gracias por la solución :)

0 votos

A mí me funcionó. También puedes usar el Administrador de Tareas para matar las tareas del explorador y reiniciarlo (Archivo > Ejecutar nueva tarea).

20voto

nedm Puntos 4392

Una cosa a tener en cuenta es que muchos programas obtienen las variables de entorno cuando se inician por primera vez, por lo que mientras que Windows puede no necesitar un reinicio, algunos programas podrían antes de ser capaces de utilizar las nuevas variables. Un buen ejemplo de esto es tener que abrir una nueva ventana del símbolo del sistema después de añadir un PATH (sí, me he tropezado con esto).

4 votos

Este problema afecta a TODOS LOS SERVICIOS, incluso un servicio reiniciado no verá las nuevas variables de entorno.

1 votos

¿Estás seguro de que no es por compartir un proceso svchost?

17voto

Darbio Puntos 4515

Aunque no tengo la suficiente reputación para comentar la respuesta más votada a esta pregunta, me gustaría afirmar que no es exactamente correcta. Lo sé porque, independientemente de la solución que he probado en este post, nada ha funcionado.

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

Sin embargo, tenga en cuenta que las modificaciones de las variables de entorno no dan lugar a un cambio inmediato. Por ejemplo, si usted inicia otro Command Prompt después de hacer los cambios, las variables de entorno reflejarán los valores anteriores (no los actuales). Los cambios no tienen efecto efecto hasta que se cierre la sesión y se vuelva a iniciar.

La parte sobre las variables de entorno que se restablecen a los valores anteriores después de recargar 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 la sesión, emita un mensaje WM_SETTINGCHANGE a todos los Windows del sistema, para 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 emita 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 hacer lo que se sugiere en el artículo de KB (para propagar los cambios inmediatamente) desde el símbolo del sistema.

1 votos

Esta es la única respuesta que me conviene. Ninguna de las otras, incluida la de matar al Explorador por las malas o por las "correctas", suponen ninguna diferencia.

3voto

Thanush Puntos 21

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 problemas. Para cambiar la cuenta del servicio abra la consola services.msc, seleccione el servicio, haga clic en las propiedades del servicio y en la segunda pestaña introduzca las credenciales de inicio de sesión de un usuario. Reinicie el servicio y sus variables de entorno deberían estar actualizadas.

Si se trata de un usuario que ha sido dado de baja, debería funcionar sin problemas. Si está utilizando la cuenta de usuario actual, entonces también podría 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.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: