用java实现修改系统的环境变量并使其不需重启就生效
来源:百度文库 编辑:神马文学网 时间:2024/10/01 12:25:24
用java实现修改系统的环境变量并使其不需重启就生效
文章分类: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)代码之后会做详细的封装,封装好后再贴上来分享。
用java实现修改系统的环境变量并使其不需重启就生效
用 GetEnvironmentVariable 获取常用系统环境变量
java环境变量配置
java环境变量配
Windows下JAVA环境变量的设置祥解
JAVA上加密算法的实现用例
JAVA上加密算法的实现用例
JAVA上加密算法的实现用例
[转]实现业务系统中的用户权限管理 - 我在Java岛的日子 - JavaEye技术网站
JAVA上加密算法的实现
随机子集的Java实现
用asp实现的代码批量修改程序
用Java实现获取绝对路径
[灌水]修改注册表实现Win 7系统自动拨号
ChinaUnix.net - (ZT)JAVA上加密算法的实现用例
JAVA上加密算法的实现用例1
用Java实现几种常见的排序算法
用Java实现按字节长度截取字符串的方法
JAVA上加密算法的实现用例_
用Java实现按字节长度截取字符串的方法
在Linux下Jdk的安装和Java环境变量的设置
在Linux下Jdk的安装和Java环境变量的设置
如何配置jdk1.5的环境变量及运行java程序 JAVA_HOME等 - Wesley ...
Windows Vista下如何配置java环境变量?