以编程方式修改环境variables?

  • Windows 7的。
  • 这是为我自己的机器,所以它不需要pipe理员权限或什么。
  • 最好在Python或.NET中,但如果有必要,我可以学习一些Win32(C / C ++)编程。

如果要永久设置环境变量,则可以将新值插入到注册表中。 例如使用vbscript,将路径“c:\ test”添加到PATH变量中

Set WshShell = WScript.CreateObject("WScript.Shell") strReg = "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path" strSetting = WshShell.RegRead(strReg) strNewSetting = strSetting&";c\test" WshShell.RegWrite strReg, strNewSetting 

因此,如果您使用Python或其他语言,则可以使用您自己的语言自己的api / modules来执行相同的操作来读取和写入注册表

在C#中,以下内容会创建一个永久环境变量:

 Environment.SetEnvironmentVariable("foo", "bar", EnvironmentVariableTarget.Machine); 

或者您可以尝试Windows PowerShell脚本; PowerShell默认安装在Windows 7上。

运行powershell.exe

 PS C:\> [Environment]::SetEnvironmentVariable("TestVariable", "Test value.", "User") 

然后,例如,从cmd.exe

 Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\>echo %TestVariable% Test value. C:\> 

或者(在新的)powershell.exe

 PS C:\> echo $ENV:TestVariable Test Value. PS C:\> 

看看http://technet.microsoft.com/en-us/library/ff730964.aspx

对于其他人在寻找一个快速的命令行答案

SETX是可用的Windows服务器(本地我想 – http://technet.microsoft.com/en-us/library/cc755104.aspx

它也可以在Windows 7和8工具包中使用 。

使用这样的环境类:

 Environment.SetEnvironmentVariable("foo", "bar"); 

以编程方式修改环境变量仅适用于程序的持续时间。 没有听说过实际上修改整个系统的环境,并在那里实现它的有效性。 我不认为这是可以做到的,那就需要在特权层面进行探讨,并且可能会搞乱核心系统来实现这一目标。

即使在Unix下,尽管有一些黑客可以实现,但是还是无法完成的。 我记得看到实际上修改MSDOS下的环境变量的代码,通过改变MSDOS的_psp环境数据结构,但这是一个单任务系统和16位,没有任何保护。

总而言之,我认为你不能这样做,这样做是不明智的,因为如果尝试这样做,可能会觉得系统受到“木马”或“病毒”的威胁,不是一个人,作为一个用户,我不希望一个程序未经我的同意修改系统环境变量! 当然,一个程序可以写入注册表,使其永久性,但我仍然想知道它的目的是什么,为什么。