Windows 以编程方式修改环境变量? 视窗7 它是为我自己的机器设计的,所以不管它是否需要管理员权限或其他什么 最好使用Python或.NET,但如果有必要,我可以学习一些Win32(C/C++)编程

Windows 以编程方式修改环境变量? 视窗7 它是为我自己的机器设计的,所以不管它是否需要管理员权限或其他什么 最好使用Python或.NET,但如果有必要,我可以学习一些Win32(C/C++)编程,windows,environment-variables,Windows,Environment Variables,使用如下环境类: Environment.SetEnvironmentVariable("foo", "bar"); 如果要永久设置环境变量,可以将新值插入注册表。例如,使用vbscript,将路径“c:\test”添加到路径变量中 Set WshShell = WScript.CreateObject("WScript.Shell") strReg = "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Pat

使用如下环境类:

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

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

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/模块来读写注册表,以编程方式修改环境变量仅在程序期间进行。还没有听说过在全系统范围内实际修改环境并使其生效。我认为这是不可能做到的,这将需要在特权级别上闲逛,并可能干扰核心系统来实现这一点

即使在Unix下,也无法实现这一点,尽管有一些黑客实现了这一点。我确实记得看到的代码确实修改了MSDOS下的环境变量,改变了MSDOS的psp环境数据结构,但那是一个单任务系统,16位,没有任何保护

总而言之,我认为您不能这样做,而且这样做是不明智的,如果尝试这样做,可能会被认为系统受到“特洛伊木马”或“病毒”的威胁,而不仅仅是作为用户,我不希望程序在未经我同意的情况下修改系统环境变量!当然,程序可以写入注册表以使其永久化,但我仍然想知道它的用途和原因。

在C#中,下面创建了一个永久性环境变量:

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

或者您可以尝试Windows PowerShell脚本;默认情况下,PowerShell安装在Windows 7上

运行powershell.exe

PS C:\> [Environment]::SetEnvironmentVariable("TestVariable", "Test value.", "User")
PS C:\> echo $ENV:TestVariable
Test Value.
PS C:\>
然后,例如,从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:\> [Environment]::SetEnvironmentVariable("TestVariable", "Test value.", "User")
PS C:\> echo $ENV:TestVariable
Test Value.
PS C:\>

查看

是否有人在寻找快速命令行答案

SETX在windows服务器上可用(我认为是本机提供的-)


它也可以在和中找到。

我忘了提到,这只是在课程期间,还是永久性的?它只会影响当前的课程环境。系统范围的更改位于注册表中(请参阅ghostdog的答案),并要求在进行更改后重新启动程序。这取决于所使用的EnvironmentVariableTarget枚举的值。当我添加“EnvironmentVariableTarget.Machine”时,请查看我的调试窗口挂起。只需将其另存为.vbs并运行它。这确实如所述工作,但在设置env var时已打开的DOS外壳似乎没有接收到更改,因此,PowerShell显然没有按所述广播
WM\u SETTINGCHANGE
消息。不过,这是一个很好的开始。请看一看是否存在一个方法集环境变量-1代表FUD。+1比上一个答案简单,并且在win7 ultimate toosetx.exe上运行,对于扩展
路径
,这是最糟糕的工具。用户和系统
路径
值不应合并,
REG\u EXPAND\u SZ
值中的百分比变量不应展开。setx.exe无法执行任何操作。它所能做的就是制造一个无法挽回的糟糕局面。不要因为我们想使用microsoft提供的命令行而责怪我们:Description:在用户或系统环境中创建或修改环境变量。可以根据参数、注册表项或文件输入设置变量。