`
409066601
  • 浏览: 30519 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

用java实现修改系统的环境变量并使其不需重启就生效

阅读更多
java 不能直接修改windows系统的环境变量,需要借助JNI转为C++的接口,以调用windows系统的注册表。(可以理解c++毕竟是微软推出的开发语言,OS源代码并未开放);目前,有开源项目实现了这个转换过程,使用版本:registry-3.1.3.zip;将压缩包bin目录中的jar包(registry.jar)导到工程中,然后在把相同目录下的dll(ICE_JNIRegistry.dll)放到jdk的bin目录下。

(ps:如其说修改环境变量,不如说修改注册表更准确些,因为是通过修改注册表来实现修改环境变量的;“环境变量”的键值所在位置:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment )

Windows Registry API Native Interface下载地址 http://www.trustice.com/java/jnireg/index.shtml 下 registry-3.1.3.zip(包含源代码)。解开 registry-3.1.3.zip,在 bin 目录中可以看到两个文件 ICE_JNIRegistry.dll 和registry.jar,动态库就是本地代码实现。

修改环境变量path 或 classpath ,代码如下:

package com.test;

import java.io.BufferedReader;
import java.io.InputStreamReader;

import com.ice.jni.registry.RegStringValue;
import com.ice.jni.registry.Registry;
import com.ice.jni.registry.RegistryKey;
public class RegistryTest {
public static void main(String[] str)
{
  try {
   RegistryKey openPath1 = Registry.HKEY_LOCAL_MACHINE
     .openSubKey("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment");
   String path_Old = openPath1.getStringValue("Path");    //获取原Path键值

   RegistryKey openPath2 = Registry.HKEY_LOCAL_MACHINE
     .openSubKey("SYSTEM\\CurrentControlSet\\Control\\Session Manager");

   RegistryKey subKey = openPath2.createSubKey("Environment", "");

  //定义Path所在目录的句柄(相当于在Session Manager路径下面,新建Environment文件夹,如果存在不改变已有的值。)
//   String path_New = path_Old + ";" + "D:\\myTinoProject\\bingy";
   String path_New = path_Old + "bin;";
   subKey.setValue(new RegStringValue(subKey, "Path", path_New)); //修改Path键值
   subKey.closeKey();
  
   //查看进程的方法
   String[] cmd = { "D:\\dfqd\\workspace\\tasklist" };
   Process proc = Runtime.getRuntime().exec(cmd);
   BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
   String string_Temp = in.readLine();
   while (string_Temp != null) {
       System.out.println(string_Temp);
       string_Temp = in.readLine();
   }
   //删除explorer.exe进程
   Process proc2 = Runtime.getRuntime().exec("D:\\dfqd\\workspace\\taskkill /F /IM explorer.exe");
   Thread.sleep(500);
   //重启explorer.exe进程
   Process proc3 = Runtime.getRuntime().exec("explorer.exe");
   System.out.println("=====SUCCESS=====");
  } catch (Exception e) {
   e.printStackTrace();
  }
}
}

注:如有下面的错误提示,句柄(subKey)未定义正确。

com.ice.jni.registry.RegistryException: Registry API Error 5, 'access denied' - 'RegSetValueEx()'

说明:
(1)代码后面的删除explorer.exe进程和重启explorer.exe进程就是为让设置好path后在不重启电脑的情况下生效,具体验证:cmd-->javac有效。
(2)中间睡0.5秒的意思是现在的电脑太牛了,还没删的时候就启了。
(3)代码之后会做详细的封装,封装好后再贴上来分享。
分享到:
评论
2 楼 5cai 2018-09-19  
RegistryKey openPath2 = Registry.HKEY_LOCAL_MACHINE.openSubKey("SOFTWARE");
RegistryKey subKey = openPath2.createSubKey("Environment", "");

会报:

Registry API Error 5, 'access denied' - 'RegCreateKeyEx()'


如果
RegistryKey openPath2 = Registry.HKEY_CURRENT_USER.openSubKey("SOFTWARE");
RegistryKey subKey = openPath2.createSubKey("Environment", "");

是可以创建的
1 楼 sunnysailor 2012-05-21  
lz不好使,报异常Registry API Error 5, 'access denied' - 'RegCreateKeyEx()'

相关推荐

    win10 eclipse中python,C++,java环境变量搭建,无需重启

    此时一个eclipse就可以搞定python,c和java的开发了,重要的是可以放到移动硬盘或者U盘中,而且win10设置环境变量是直接生效的不需要重启。 echo "本工具自动设置D盘根目录下的dev目录中的java,python,tmdgcc编译器...

    JAVA环境变量一键设置工具

    能自动检测JDK的安装路径,不限版本,一键设置PATH,JAVA_HOME, CLASSPATH环境变量,即时生效无需重启,本软件用VC开发,非批处理程序!

    自动添加环境变量

    使用说明:下载后解压到需要添加到环境变量的目录,双击exe文件即可。 如果环境变量中已存在该路径,不会重复添加 网上很多批处理添加环境变量的方法,但都不能立即生效,...可以用来配置Java环境变量或其他任何应用。

    自动添加配置Java环境变量工具.zip

    本工具能自动添加环境变量,可使用它配置Java环境变量或其他任何应用。下载之后要先解压到需要添加到环境变量的目录,设置环境变量.exe即可。智能判断,如果环境变量中已存在该路径,程序不会重复添加。网上也有很多...

    设置JAVA、MinGW、NASM编译器的环境变量 (Windows系统)

    设置Windows系统中JDK(JAVA)、MinGW(GCC)、NASM三种编译器的系统环境变量。 本程序依据三种编译器安装目录的不同关键字自行区分设置。 复制可执行文件到编译器的安装目录下,右键以管理员身份运行即可。 最终...

    安装linux环境及相关配置系统视频教程

    使得环境变量生效 7、查看安装的jdk是否为Oracle的jdk,输入env查看环境变量,找到JAVA_HOME,进入BIN 目录 --查找软件的安装路径:which java --java默认的安装路径:/usr/java/jdk1.8.0_151/bin

    jdk 1.8 linux

    这样可以使配置不用重启即可立即生效。 4、检查新安装的jdk [root@localhost software]# java -version 显示: java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8.0_131-b11) Java HotSpot...

    mysql-java8-tomcat8

    8\让环境变量立刻生效 source /etc/profile 9\测试java是否安装成功 java -version 二\mysql安装 cd 1\下载安装包,上传到服务器 mysql-5.7.20-1.el7.x86_64.tar.gz 2\首先确认一下你的linux服务器上面是否...

    aiolos:aiolos---艾俄洛斯

    在项目中我们往往会考虑使用配置文件来管理一些变量,在单机少量用户访问的场景下一个简单的配置文件就可以实现,修改配置后重启项目就可以生效。但线上环境往往是集群形式,且修改配置时不允许重启应用,这就要求...

    AAWServer v5.0(全能网站服务器平台).rar

    错,这是由于环境变量设置没生效引起的,因此在安装完AAWServer后,需要重启一下你的计算机,使JSP 运行所需的环境变量生效。 简介: AAWServer_v4.0 是一款基于 Apache resin 的全能服务器组合套件, 拥有安装...

    asp.net知识库

    不该用Generics实现Abstract Factory的理由 C#2.0-泛型 C#2.0-extern C#2.0-可空类型 C#2.0-分部类 C#2.0-迭代器 C#2.0 的新增功能学习 泛型的序列化问题 .NET 2.0 泛型在实际开发中的一次小应用 C#2.0 Singleton 的...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     删除环境变量中的PATHT CLASSPATH中包含Oracle的值。  删除“开始”/“程序”中所有Oracle的组和图标。  删除所有与Oracle相关的目录,包括: C:\Program file\Oracle目录。 ORACLE_BASE目录。 C:\Documents ...

    Mytomcat:自己实现一个简单的Tomcat

    配完之后重启电脑,使配置生效。 2.3 部署项目 2.3 启动项目 运行bin目录下的startup.bat文件 2.4 访问项目 2.5 日志记录 3.Mytomcat源码目录结构 工具:Idea+Maven 唉,封装真是不简单啊.... 我的想法 1.解析web....

    k8s二进制文件以及docker二进制文件

    查看并修改 ceph-sercet.yaml 文件。 此key值是 ceph存储用户的token值 ,将此key值转换为base64 将文件中红色选选中部分修改为转换后的值。 修改完成后 部署 pv 和 pvc 执行命令:kubectl create -f es-...

    MySQL5.1参考手册官方简体中文版

    4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 5. 数据库管理 5.1. MySQL服务器和服务器启动脚本 5.1.1. 服务器端脚本和实用工具概述 5.1.2. mysqld-max扩展MySQL服务器 5.1.3. mysqld_safe:MySQL服务器...

    MySQL 5.1参考手册

    4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 5. 数据库管理 5.1. MySQL服务器和服务器启动脚本 5.1.1. 服务器端脚本和实用工具概述 5.1.2. mysqld-max扩展MySQL服务器 5.1.3. mysqld_safe:MySQL服务器...

    mysql官方中文参考手册

    4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 5. 数据库管理 5.1. MySQL服务器和服务器启动脚本 5.1.1. 服务器端脚本和实用工具概述 5.1.2. mysqld-max扩展MySQL服务器 5.1.3. mysqld_safe:MySQL服务器...

    MYSQL中文手册

    4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 5. 数据库管理 5.1. MySQL服务器和服务器启动脚本 5.1.1. 服务器端脚本和实用工具概述 5.1.2. mysqld-max扩展MySQL服务器 5.1.3. mysqld_safe:MySQL...

    MySQL 5.1参考手册中文版

    4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 5. 数据库管理 5.1. MySQL服务器和服务器启动脚本 5.1.1. 服务器端脚本和实用工具概述 5.1.2. mysqld-max扩展MySQL服务器 5.1.3. mysqld_safe:MySQL...

Global site tag (gtag.js) - Google Analytics