C# 實現設置系統環境變量設置

 string sPath = Environment.GetEnvironmentVariable("SAP_CODEPAGE"); //獲取環境變量
             
             if (sPath != "8400") 
             {
                 System.Environment.SetEnvironmentVariable("SAP_CODEPAGE", "8400", EnvironmentVariableTarget.Machine);
                 MessageBox.Show("環境變量添加成功");
             }

// Machine系統環境變量

Environment.SetEnvironmentVariable("CLASSPATH", @".;%JAVA_HOME%\lib", EnvironmentVariableTarget.Machine);
Environment.SetEnvironmentVariable("path", @"%JAVA_HOME%\lib;" + Environment.GetEnvironmentVariable("path"), EnvironmentVariableTarget.Machine);




.NET操作Windows環境變量
靜態類:System.Environment
說明:Environment類提供有關當前環境和平臺的信息以及操作它們的方法。無法繼承此類。使用Environment類可檢索信息,如命令行參數、退出代碼、環境變量設置、調用堆棧的內容、自上次系統啓動以來的時間,以及公共語言運行庫的版本等。
屬性:
摘要:獲取該進程的命令行。
public static string CommandLine { get; }
摘要:獲取和設置當前目錄(即該進程從中啓動的目錄)的完全限定路徑。
public static string CurrentDirectory { get; set; }
摘要:獲取或設置進程的退出代碼。
public static int ExitCode { get; set; }
摘要:獲取一個值,該值指示是否公共語言運行庫正在關閉或者當前的應用程序域正在卸載。
public static bool HasShutdownStarted { get; }
摘要:獲取此本地計算機的 NetBIOS 名稱。
public static string MachineName { get; }
摘要:獲取爲此環境定義的換行字符串。“\r\n”用於非 Unix 平臺或“\n”用於 Unix 平臺。
public static string NewLine { get; }
摘要:獲取包含當前平臺標識符和版本號的 System.OperatingSystem 對象。
public static OperatingSystem OSVersion { get; }
摘要:獲取當前計算機上的處理器數。
public static int ProcessorCount { get; }
摘要:獲取當前的堆棧跟蹤信息。
public static string StackTrace { get; }
摘要:獲取系統目錄的完全限定路徑。
public static string SystemDirectory { get; }
摘要:獲取系統啓動後經過的毫秒數。
public static int TickCount { get; }
摘要:獲取與當前用戶關聯的網絡域名。
public static string UserDomainName { get; }
摘要:獲取一個值,用以指示當前進程是否在用戶交互模式中運行。
public static bool UserInteractive { get; }
摘要:獲取啓動當前線程的人的用戶名。
public static string UserName { get; }
摘要:獲取一個System.Version對象,該對象描述公共語言運行庫的主版本、次版本、內部版本和修訂號。
public static Version Version { get; }
摘要:獲取映射到進程上下文的物理內存量。
public static long WorkingSet { get; }
方法:
摘要:終止此進程併爲基礎操作系統提供指定的退出代碼。
public static void Exit(int exitCode);
摘要:將嵌入到指定字符串中的每個環境變量名稱替換爲該變量的值的等效字符串,然後返回結果字符串。
public static string ExpandEnvironmentVariables(string name);
摘要:終止進程但不執行任何活動 try-finally 塊或終結器。
public static void FailFast(string message);
摘要:返回包含當前進程的命令行參數的字符串數組。
public static string[] GetCommandLineArgs();
摘要:從當前進程檢索環境變量的值。
public static string GetEnvironmentVariable(string variable);
摘要:從當前進程或者從當前用戶或本地計算機的 Windows 操作系統註冊表項檢索環境變量的值。
public static string GetEnvironmentVariable(string variable, EnvironmentVariableTarget target);
摘要:從當前進程檢索所有環境變量名及其值。
public static IDictionary GetEnvironmentVariables();
摘要:從當前進程或者從當前用戶或本地計算機的 Windows 操作系統註冊表項檢索所有環境變量名及其值。
public static IDictionary GetEnvironmentVariables(EnvironmentVariableTarget target);
摘要:獲取指向由指定枚舉標識的系統特殊文件夾的路徑。
public static string GetFolderPath(Environment.SpecialFolder folder);
摘要:返回包含當前計算機中的邏輯驅動器名稱的字符串數組。
public static string[] GetLogicalDrives();
摘要:創建、修改或刪除當前進程中存儲的環境變量。
public static void SetEnvironmentVariable(string variable, string value);
摘要:創建、修改或刪除當前進程中或者爲當前用戶或本地計算機保留的 Windows 操作系統註冊表項中存儲的環境變量。
public static void SetEnvironmentVariable(string variable, string value, EnvironmentVariableTarget target);












以前實現系統環境變量設置時是要在電腦屬性--高級--環境變量設置,實現方式主要有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+";");
               
            }


        }
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章