(大坑,不看后悔系列) bat:设置高级环境变量并不重启生效

设置高级变量方法:

::MAVENPATH为将要添加的系统变量
SET  MAVENPATH=D:\JDK\apache-maven-3.6.3\bin
wmic ENVIRONMENT where "name='path' and username=''"  set VariableValue="%path%;%MAVENPATH%"

不能用

::该命令只会对当前cmd生效,而不会在系统环境变量添加

set PATH=C: 

是对副本的修改却会引发Windows环境变量的刷新,这正是我们想要的!

 以修改环境变量“PATH”为例,执行第一个脚本后,进入DOS命令提示符,输入:set PATH=C: ,关闭DOS窗口。再次打开DOS窗口,输入:echo %PATH% ,可以发现“我的电脑”->“属性”->“高级”->“环境变量”中设置的 PATH 值已经生效。当然也可以通过脚本来实现

这里要理解的是,一个程序启动时,环境变量被复制到该程序所在的环境中,在该程序执行过程中不会被除该程序以外的其他程序所改变。也就是说,假设我们启动了一个cmd程序,然后通过控制面板修改了环境变量设置,但是已经启动了的cmd所拥有的环境变量并不会被改变。如果我们在修改环境变量之后启动cmd程序,则该程序将拥有新的环境变量。
那么结论就很明显了:修改环境变量之后,如果受影响的是应用程序,那么只要简单地重新启动此应用程序,环境变量的修改就会反映到该程序中,而不必重新启动计算机;但是,如果受影响的是系统服务,就必须重新启动才能将环境变量的修改反映到系统服务中(因为没有办法在不重启计算机的情况下重新启动系统服务管理器)。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

以上全都是在搞笑,我也入坑了。(不排除操作系统不同,引起的)

先说为什么在搞笑。首先通过方法:“我的电脑”->“属性”->“高级”->“环境变量”,修改环境变量Path,立马就会生效。根本不需要后续操作,就可以立即生效

解决方案1:微软提供 setx.exe可以立即生效,但是属性值长度大于1024就会截断。

               2.C#提供的environment.setvaribale(属性,属性值,environmentTarget.machine)

    private void SetEnvPath()
        {
            string oldPath = Environment.GetEnvironmentVariable("Path");
            string addPath= WorkDir ;
            if (!oldPath.Contains(addPath))
            {
                string newPath = addPath+ ";" + oldPath;
                Environment.SetEnvironmentVariable("Path", newPath, EnvironmentVariableTarget.Machine);
            }
        }

 

 

你可能感兴趣的:(其他,bat,高级系统环境变量)