`
409066601
  • 浏览: 31045 次
  • 性别: 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()'

相关推荐

    使windows系统环境变量的改变即时生效

    本文将介绍如何利用WMIC(Windows Management Instrumentation Command-line)命令行工具,实现在不重启系统的情况下,即时更新JDK的环境变量。 首先,我们需要理解环境变量的类型:系统环境变量和用户环境变量。...

    java 环境变量修改方法

    ### Java环境变量修改方法 在计算机系统中,环境变量是一种重要的配置信息,它对软件运行起着关键作用。对于Java开发者来说,正确设置Java环境变量是确保Java应用程序能够正常运行的前提之一。本文将详细介绍如何...

    简单代码实现环境变量的修改

    在开发过程中,修改环境变量后重启电脑以使改动生效,这是常规做法,因为Windows系统在运行时并不实时刷新环境变量。但有些情况下,可以通过调用`system("setx VARNAME VALUE /M")`命令(在命令提示符中)来修改系统...

    java环境变量自动配置for windows

    本文将详细讲解如何使用提供的BAT文件来自动配置Java环境变量,并阐述相关知识点。 首先,Java开发工具包(Java Development Kit,简称JDK)安装后,为了能够执行Java程序和开发Java应用,我们需要配置三个关键的...

    java环境变量配置工具1.6-1.9 即时生效

    这款"java环境变量配置工具1.6-1.9 即时生效"显然是一款专门用于简化这一过程的实用工具,支持从Java 1.6到1.9版本的环境配置,并且具有配置后立即生效的特点,无需重启计算机。 1. **Java环境变量详解**: - **...

    Java系统环境变量设置工具

    环境变量的配置可以通过控制面板或命令行进行,但过程可能涉及到多个步骤,包括查找正确的安装路径,编辑系统的环境变量,然后重启终端或电脑使更改生效。JavaPathSet.exe可能通过图形界面或者简单的命令行接口,...

    用BAT设置WINDOWS系统环境变量,如java的jdk环境变量

    在执行脚本后,环境变量的变更会立即生效,但重启系统后,这些设置会丢失,因此如果需要永久性设置环境变量,应通过“系统属性”>“高级”>“环境变量”进行设置。 总的来说,了解并正确设置这些环境变量对于任何...

    java环境变量一键配置

    Java环境变量配置是Java开发中不可或缺的一环,它使得操作系统能够找到Java开发工具集(JDK)的位置,进而运行Java程序。本教程将详细介绍如何通过一键配置的方式设置Java环境变量,以便于开发者更加高效地进行Java...

    Java环境变量设置脚本

    Java环境变量设置脚本是Java开发中至关重要的一步,它确保了Java开发工具包(JDK)正确安装并能够在操作系统中被识别和调用。在Windows、Linux或macOS等不同操作系统上,环境变量的配置方式略有差异,但其核心目标是...

    java环境变量的配置

    正确配置Java环境变量是确保系统能够识别并运行Java程序的基础。本文将详细介绍如何在Windows操作系统上配置Java环境变量,包括必要的步骤与细节。 #### 二、准备工作 在进行Java环境变量配置之前,首先需要安装...

    设置Java环境变量

    Java环境变量的设置是每个Java开发者都需要掌握的基本技能。它涉及到三个主要的环境变量:JAVA_HOME、PATH和CLASSPATH,这些变量确保系统能够正确找到Java的安装位置、可执行文件以及类库。以下是对这些环境变量的...

    java 环境变量的配置

    ### Java环境变量配置详解 #### 一、Java环境变量配置的重要性 在开发Java应用程序时,正确配置Java环境变量是至关重要的第一步。环境变量是操作系统用来存储特定程序运行所需信息的一系列名称与值对。对于Java而...

    批处理设置java环境变量

    执行这个批处理脚本后,重启命令提示符或计算机,新的Java环境变量设置就会生效。开发者可以根据实际的Java安装位置和所需的类库来调整脚本中的路径。 总结来说,批处理设置Java环境变量是一项基础但重要的任务,它...

    配置JAVA环境变量JDK1.7--win8英文版系统

    Java环境变量的配置是安装和使用Java开发工具包(JDK)的关键步骤,尤其对于开发者来说,这使得系统能够识别并执行Java程序。在Windows 8英文版系统上配置Java环境变量JDK 1.7(也称为Java 7)的步骤如下: 首先,...

    java环境变量设置器

    Java环境变量设置是Java开发和运行过程中的关键步骤,它涉及到Java开发工具(JDK)的安装路径、Java运行时环境(JRE)的位置以及Java应用程序的可执行路径。环境变量确保操作系统能够找到并正确执行Java相关的命令和...

    Java环境变量添加工具

    Java环境变量添加工具是一款专为Java开发者设计的实用程序,它简化了在Windows操作系统中配置Java开发环境的过程。通常,为了运行Java程序或进行Java开发,我们需要手动设置一系列环境变量,如JAVA_HOME、PATH和...

    JAVA 环境变量配置

    然而,为了使Java应用程序能在本地环境中顺利运行,我们需要进行Java环境变量的配置。这个过程涉及到设置`JAVA_HOME`, `PATH`以及`CLASSPATH`等关键变量。现在我们将详细讲解如何配置这些环境变量。 1. **JAVA_HOME...

    java环境变量一键配置脚本

    Java环境变量一键配置脚本是Java开发中必不可少的工具,它极大地简化了Java开发者在不同操作系统上设置环境变量的过程。通常,配置Java环境变量包括设置`JAVA_HOME`、`PATH`和`CLASSPATH`等系统变量,这些变量对正确...

Global site tag (gtag.js) - Google Analytics