微软有一篇知识库文章 ,上次审查于2007年6月,其中指出:
如果更新环境variables或添加新的环境variables,则必须重新启动计算机,然后才能对在“本地系统”帐户下运行的服务产生影响。
我不清楚这是否适用于Windows Server 2008 R2。 任何人都可以build议吗?
我注意到有一个解决此问题的Windows 2003的修复程序 。 因此,我想知道是否2008 R2已经在这个修复。 我找不到任何证据表明Windows 2008 R2仍然存在问题,但是缺乏证据不如说是相反的具体说法。
一个相关的问题涵盖了类似的理由,但不讨论Windows 2008。
重新启动服务将获取对系统环境variables的更改。
检查:使用SysInternals Process Explorer在更改/添加System环境variables和重新启动服务之前和之后检查服务进程的环境。 注意:使用procexp.exe上的“以pipe理员身份运行”来查看系统进程的所有属性。


当然。 任何进程都会看到环境variables,因为它们是在进程启动的时候。 它基本上得到一个副本。
所以,如果你需要他们被服务拿起 – 重新启动服务。 如果您需要用窗口拾取它们,请重新启动窗口。
特别是因为本地系统帐户正在保留这个副本;)所以 – 不。 这依然如此。 我通常会说,改变这是一个“接近零的优先”项目,因为这种改变是非常罕见的。
运行时可能通过讨厌的黑客。 否则只能通过重启。
刚刚证实可以用Cygwin GDB改变环境variables。 试用x86 Cygwin和x86 Winword。 使用ProcExp.exe进行validation。
GDB命令在这里find: https : //stackoverflow.com/questions/205064/is-there-a-way-to-change-another-processs-environment-variables
微软表示这不是这样做的常规方法: http : //msdn.microsoft.com/en-us/library/windows/desktop/ms682009(v=vs.85).aspx
在进程创build期间更改subprocess的环境variables是一个进程可以直接更改另一个进程的环境variables的唯一方法。 进程永远不能直接更改另一个不属于该进程subprocess的进程的环境variables。
我之前的编辑:
我最好的猜测:服务需要重新启动。 至less。
创build过程将inheritance父级的环境variables。 ( http://msdn.microsoft.com/en-us/library/windows/desktop/ms682653(v=vs.85).aspx )
所以:进程必须重新启动,并且必须有东西来inheritance。
如何检查
使用ProcExp.exe检查你自己。 ( http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx )双击您感兴趣的进程,然后select“环境”选项卡。
要查找父级,请双击子级,select“图像”选项卡并阅读“Parent:”行。
重复遗产线的所有方式。
@Brian答案不包括所有的用例。 在我的情况下,我已经将Windows 7 x64机器上的Java从版本7升级到版本8.之后,依赖于Java的服务无法启动(“net start SymmetricDS”),因为系统找不到Java可执行文件。
即services.exe(所有LocalSystem服务的父进程)不会自行select环境variables的更改。 它只是为了新产生的subprocess。 我已经通过SysInternals Process Explorer来查看它。 certificate: http : //workblog.pilin.name/2013/03/service-environment-variables.html 。 它没有说它适用于哪个版本的Windows,但发布的date是相当新的,所以我认为它适用于Windows 7和Windows Server 2008。
通过在services.exe中包含的旧PATH文件夹中的一个文件夹中创build符号链接来解决问题。