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