zoukankan      html  css  js  c++  java
  • 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+";");

    }

    }
    }

     
  • 相关阅读:
    28、vSocket模型详解及select应用详解
    27、通过visual s'tudio 验证 SOCKET编程:搭建一个TCP服务器
    26、TCP服务器原理
    8、字符串操作
    9、内存操作
    ESP32作为接入点AP
    ·通过wifi_scan学习esp32wifi程序编写
    10、指针变量基础
    关于wifi网络基本原理了解
    开发团队中命名规范的重要性
  • 原文地址:https://www.cnblogs.com/ITBread/p/2450367.html
Copyright © 2011-2022 走看看