用java实现修改系统的环境变量并使其不需重启就生效
来源:互联网 发布:ubuntu退出文件夹命令 编辑:程序博客网 时间:2024/04/30 15:45
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)代码之后会做详细的封装,封装好后再贴上来分享。
- 用java实现修改系统的环境变量并使其不需重启就生效
- 用java实现修改系统的环境变量并使其不需重启就生效
- 批量修改系统中最大进程数的相关配置并使其在线生效。
- Win7不重启系统 使修改后的环境变量生效
- linux修改环境变量并生效
- VC修改环境变量, 不重启系统, 即时生效.
- 通过环境变量修改java版本不生效
- Windows修改java环境变量不生效
- 通过环境变量修改java版本不生效
- 使环境变量修改后立即生效的解决办法
- windows环境变量修改立刻生效的办法
- linux系统java环境变量不生效
- 如何使windows系统环境变量的改变即时生效
- Windows系统不重启而使环境变量生效的方法
- 修改完linux bashrc文件之后,如何不重启系统使其生效
- 系统环境变量何时生效的 分析调查报告
- Linux基础知识学习:Linux中修改环境变量及使环境变量生效的方法
- VC编程获取和修改环境变量,不重启系统即时生效
- 二进制、八进制、十进制、十六进制之间转换
- 两个函数中的局部变量
- C#中类的分类
- page191
- c#中ref跟out的用法
- 用java实现修改系统的环境变量并使其不需重启就生效
- cscope and gvim
- SQL用户权限分配
- ssh整合
- linux下的基本网络配置
- ssh中“Host key verification failed.“的解决方案
- jQuery获取Select选中的Text和Value
- 查看与清除缓存计划
- Linux系统下C++开发工具