用C#写了一个窗体程序, 操作注册表, 设置Java环境变量:
运行截图(容易被拦截):
程序源码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using Microsoft.Win32;
namespace EnviromentSet
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
textBox1.Text = @"C:\Program Files\Java\jdk1.8.0_131";
}
/// <summary>
/// 设置
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_set_Click(object sender, EventArgs e)
{
string path = textBox1.Text.Trim();
if (string.IsNullOrWhiteSpace(path))
{
MessageBox.Show("路径有误。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Stop);
return;
}
if (!Directory.Exists(path))
{
MessageBox.Show("路径有误。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Stop);
return;
}
/**
* 设置系统变量
* **/
//环境变量的注册表分支
string Syspath = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment";
//实例化根节点
RegistryKey LocalMachineReg = Registry.LocalMachine;
//定位到环境变量节点,可读写
RegistryKey EnvReg = LocalMachineReg.OpenSubKey(Syspath, true);
//获取环境变量节点下的子键
string[] ChildrenReg = EnvReg.GetValueNames();
//键下没有对应键值
if (!ChildrenReg.Contains("JAVA_HOME", StringComparer.OrdinalIgnoreCase))//如果不存在这个键
{
//创建键,并写入键值
EnvReg.SetValue("JAVA_HOME", path, RegistryValueKind.String);
richTextBox_message.AppendText("JAVA_HOME路径创建成功,JAVA_HOME路径设置成功。\r\n");
}
else
{
SetEnvValue(EnvReg, "JAVA_HOME", path);
richTextBox_message.AppendText("JAVA_HOME路径设置成功。\r\n");
}
if (!ChildrenReg.Contains("CLASSPATH", StringComparer.OrdinalIgnoreCase))//如果不存在这个键
{
//创建键,并写入键值
EnvReg.SetValue("CLASSPATH", @".;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar", RegistryValueKind.ExpandString);
richTextBox_message.AppendText("CLASSPATH路径创建成功,CLASSPATH路径设置成功。\r\n");
}
else
{
SetEnvValue(EnvReg, "CLASSPATH", ".");
SetEnvValue(EnvReg, "CLASSPATH", @"%JAVA_HOME%\lib");
SetEnvValue(EnvReg, "CLASSPATH", @"%JAVA_HOME%\lib\tools.jar");
richTextBox_message.AppendText("CLASSPATH路径设置成功。\r\n");
}
if (!ChildrenReg.Contains("PATH",StringComparer.OrdinalIgnoreCase))//如果不存在这个键
{
//创建键,并写入键值
EnvReg.SetValue("PATH", @".;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin", RegistryValueKind.ExpandString);
richTextBox_message.AppendText("PATH路径创建成功,PATH路径设置成功。\r\n");
}
else
{
SetEnvValue(EnvReg, "PATH", ".");
SetEnvValue(EnvReg, "PATH", @"%JAVA_HOME%\bin");
SetEnvValue(EnvReg, "PATH", @"%JAVA_HOME%\jre\bin");
richTextBox_message.AppendText("PATH路径设置成功。\r\n");
}
EnvReg.Close();
richTextBox_message.AppendText("系统变量设置成功。\r\n");
/**
* 设置用户变量
* **/
string UserPath = "Environment";//环境变量的注册表分支
RegistryKey CurrentUserReg = Registry.CurrentUser;//实例化根节点
RegistryKey UserReg = CurrentUserReg.OpenSubKey(UserPath, true);//定位到环境变量节点
string[] ChildrenUserReg = UserReg.GetValueNames();
//键下没有对应键
if (!ChildrenUserReg.Contains("PATH", StringComparer.OrdinalIgnoreCase))//如果不存在这个键
{
//创建键,并写入键值
UserReg.SetValue("PATH", @"%JAVA_HOME%\bin", RegistryValueKind.ExpandString);
richTextBox_message.AppendText("PATH路径创建成功,PATH路径设置成功。\r\n");
}
else
{
SetEnvValue(UserReg, "PATH", @"%JAVA_HOME%\bin");
richTextBox_message.AppendText("PATH路径设置成功。\r\n");
}
richTextBox_message.AppendText("用户变量设置成功。\r\n");
MessageBox.Show("Java环境变量设置成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
这两个方法用来获取键值和设置键值:
/// <summary>
/// 获取键下键值的方法
/// </summary>
/// <param name="reg">指定键所在键根节点</param>
/// <param name="name">键名称</param>
/// <returns></returns>
public string GetEnvValue(RegistryKey reg, string name)
{
//定义一个临时字符串
string result;
try
{
//获取键值
result = reg.GetValue(name).ToString();
}
catch
{
return "未获取到键值信息,请检查权限。";
}
return result;
}
/// <summary>
///
/// </summary>
/// <param name="reg">指定键所在键根节点</param>
/// <param name="name">键名称</param>
/// <param name="addpath">新增内容</param>
public void SetEnvValue(RegistryKey reg, string name, string addpath)
{
string result = GetEnvValue(reg, name);//获取键值字符串
string[] KeyList = result.Split(';');//用分号进行分割
bool isPathExist = false;//定义一个标志
foreach (string item in KeyList)
{
//如果键值中有与所添加键值相同的项
if (item == addpath)
{
isPathExist = true;
}
}
if (!isPathExist)
{
reg.SetValue(name, result + ";" + addpath, RegistryValueKind.ExpandString);//将新增属性添加在后面.
}
}