原文:
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+
";"
);
}
}
}

