⽤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 )
修改环境变量path 或 classpath ,代码如下:
st;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import com.istry.RegStringValue;
import com.istry.Registry;
import com.istry.RegistryKey;
public class RegistryTest {
public static void main(String[] str)
{
环境变量path误删有影响吗try {
RegistryKey openPath1 = Registry.HKEY_LOCAL_MACHINE
.openSubKey("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment");
String path_Old = StringValue("Path"); //获取原Path键值
RegistryKey openPath2 = Registry.HKEY_LOCAL_MACHINE
.openSubKey("SYSTEM\\CurrentControlSet\\Control\\Session Manager");
RegistryKey subKey = ateSubKey("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().exec(cmd);
BufferedReader in = new BufferedReader(new InputStream()));
String string_Temp = in.readLine();
while (string_Temp != null) {
System.out.println(string_Temp);
string_Temp = in.readLine();
}
//删除进程
Process proc2 = Runtime().exec("D:\\dfqd\\workspace\\taskkill /F /");
Thread.sleep(500);
//重启进程
Process proc3 = Runtime().exec("");
System.out.println("=====SUCCESS=====");
} catch (Exception e) {
e.printStackTrace();
}
}
}
注:如有下⾯的错误提⽰,句柄(subKey)未定义正确。
com.istry.RegistryException: Registry API Error 5, 'access denied' - 'RegSetValueEx()'
说明:
(1)代码后⾯的删除进程和重启进程就是为让设置好path后在不重启电脑的情况下⽣效,具体验证:cmd-->javac有效。
(2)中间睡0.5秒的意思是现在的电脑太⽜了,还没删的时候就启了。
(3)代码之后会做详细的封装,封装好后再贴上来分享。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论