Environmental variables can change for a number of reasons and there are a few key things to remember about why you likely won’t see those changes reflected immediately.

  • Processes get their environmental variables from their parent process.
  • Not everything that changes an environmental variable sends a broadcast that the settings have changed.
  • Only top-level (below Windows Explorer) processes can listen for those broadcasts.
  • Not every process reacts to those messages - PowerShell, cmd.exe, conemu, and more do not pick up changes to environmental variables.
  • Anything spawned by the processes mentioned above will get stale environmental variables. And anything they spawn will get the same.
  • Child processes cannot update the environmental variables of their parent process (just like in real life, the parents' don’t listen to the kids).

This leads to confusing situations like:

You are running cmd.exe or PowerShell inside of ConEmu, you will not see any change to environmental variables until ConEmu restarts.

You are running chef-client and you install an MSI, which updates your PATH. chef-client will not see that updated path until the next time it runs (in a new host process - so if you are running as a service it might be a while…).