C# 操作注册表 设置Java环境变量

用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);//将新增属性添加在后面.
            }
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值