隐藏

C# 实现设置系统环境变量设置

发布:2020/7/6 10:01:00作者:管理员 来源:本站 浏览次数:782

以前实现系统环境变量设置时是要在电脑属性--高级--环境变量设置,实现方式主要有2种,

  1. 修改注册表,添加环境变量
  2. 调用系统Kernel32.DLL函数,设置环境变量

 

 

注册表方式,是要修改注册表的位置是[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]

代码我已经封装,注意要引入命名空间

using Microsoft.Win32; using System.Runtime.InteropServices;

如下:

class SysEnvironment
{ /// <summary> /// 获取系统环境变量 /// </summary> /// <param name="name"></param> /// <returns></returns> public static string GetSysEnvironmentByName(string name)
    { string result = string.Empty; try {
            result = OpenSysEnvironment().GetValue(name).ToString();//读取 } catch (Exception)
        { return string.Empty;
        } return result;

    } /// <summary> /// 打开系统环境变量注册表 /// </summary> /// <returns>RegistryKey</returns> private static RegistryKey OpenSysEnvironment()
    {
        RegistryKey regLocalMachine = Registry.LocalMachine;
        RegistryKey regSYSTEM = regLocalMachine.OpenSubKey("SYSTEM", true);//打开HKEY_LOCAL_MACHINE下的SYSTEM  RegistryKey regControlSet001 = regSYSTEM.OpenSubKey("ControlSet001", true);//打开ControlSet001  RegistryKey regControl = regControlSet001.OpenSubKey("Control", true);//打开Control  RegistryKey regManager = regControl.OpenSubKey("Session Manager", true);//打开Control  RegistryKey regEnvironment = regManager.OpenSubKey("Environment", true); return regEnvironment;
    } /// <summary> /// 设置系统环境变量 /// </summary> /// <param name="name">变量名</param> /// <param name="strValue">值</param> public static void SetSysEnvironment(string name, string strValue)
    {
        OpenSysEnvironment().SetValue(name, strValue);

    } /// <summary> /// 检测系统环境变量是否存在 /// </summary> /// <param name="name"></param> /// <returns></returns> public bool CheckSysEnvironmentExist(string name)
    { if (!string.IsNullOrEmpty(GetSysEnvironmentByName(name))) return true; else return false;
    } /// <summary> /// 添加到PATH环境变量(会检测路径是否存在,存在就不重复) /// </summary> /// <param name="strPath"></param> public static void SetPathAfter(string strHome)
    { string pathlist ;
        pathlist = GetSysEnvironmentByName("PATH"); //检测是否以;结尾 if (pathlist.Substring(pathlist.Length - 1, 1) != ";")
        {
            SetSysEnvironment("PATH", pathlist + ";");
            pathlist = GetSysEnvironmentByName("PATH");
        } string[] list = pathlist.Split(';'); bool isPathExist = false; foreach (string item in list)
        { if (item == strHome)
                isPathExist = true;
        } if (!isPathExist)
        {
            SetSysEnvironment("PATH", pathlist +strHome+ ";");
        }

    } public static void SetPathBefore(string strHome)
    { string pathlist;
        pathlist = GetSysEnvironmentByName("PATH"); string[] list = pathlist.Split(';'); bool isPathExist = false; foreach (string item in list)
        { if (item == strHome)
                isPathExist = true;
        } if (!isPathExist)
        {
            SetSysEnvironment("PATH", strHome + ";" + pathlist);
        }

    } public static void SetPath(string strHome)
    { string pathlist;
        pathlist = GetSysEnvironmentByName("PATH"); string[] list = pathlist.Split(';'); bool isPathExist = false; foreach (string item in list)
        { if (item == strHome)
                isPathExist = true;
        } if (!isPathExist)
        {
            SetSysEnvironment("PATH", pathlist + strHome + ";" );
       
        }

    }


}
 
 
Kernel32.DLL内有SetEnvironmentVariable函数用于设置系统环境变量
C#调用要用DllImport,代码封装如下:
class SetSysEnvironmentVariable
    {
        [DllImport("Kernel32.DLL ", SetLastError = true)] public static extern bool SetEnvironmentVariable(string lpName, string lpValue); public static void SetPath(string pathValue)
        { string pathlist;
            pathlist = SysEnvironment.GetSysEnvironmentByName("PATH"); string[] list = pathlist.Split(';'); bool isPathExist = false; foreach (string item in list)
            { if (item == pathValue)
                    isPathExist = true;
            } if (!isPathExist)
            {
                SetEnvironmentVariable("PATH", pathlist + pathValue+";");
               
            }

        }
    }