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

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

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

以前实现系统环境变量设置时是要在电脑属性--高级--环境变量设置,实现方式主要有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+";");
               
            }

        }
    }