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

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 )


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

package reg;
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\\bin";
   subKey.setValue(new RegStringValue(subKey, "Path", path_New)); //修改Path键值
   subKey.closeKey();

  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

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

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

操作中会遇到一些问题

1、出现Registry API Error 5, 'access denied' - 'RegSetValueEx()' 错误,因为需要调用createSubKey("Environment", "");返回的subKey才可以setValue(); 不用担心 ,原来的不会消失

2、设置DWORD类型 range.setValue(new RegDWordValue(range, "1406", RegistryValue.REG_DWORD, 0));

3、dll文件位置的摆放,可以放到工程中,修改源码即可,修改源码如下,即loadlibary改成load方法(增强可移植性)

           
   try {
				File file = File.createTempFile("ICE_JNIRegistry", ".dll");
				
				FileOutputStream fout = new FileOutputStream(file);

				InputStream in = Registry.class.getResourceAsStream("/ICE_JNIRegistry.dll");
				
				byte[] b = new byte[1024];
				
				int len = 0; 
				
				while((len = in.read(b)) != -1){
					fout.write(b, 0, len);
				}
				
				fout.flush();
				
				in.close();
				fout.close();
				System.load(file.getAbsolutePath());

			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
分享到:
评论

相关推荐

    JAVA注册表垃圾清理

    同时,"另附jRegistryKey的操作API使用说明"表明该软件可能使用了名为jRegistryKey的库来操作注册表,这个库提供了Java API来访问和修改注册表项,对于学习Java与注册表交互的开发者来说,这部分资料尤为珍贵。...

    java注册表修改

    在IT领域,尤其是在Java开发中,对注册表的修改是一项重要的技能,特别是在处理与操作系统集成的应用程序时。本文将深入探讨“java注册表修改”的核心概念、代码示例及其应用场景,帮助开发者更好地理解和掌握这一...

    JAVA操作注册表的神器

    在提供的压缩包文件中,有一个名为`WinRegistry.java`的文件,这可能是一个实现了注册表操作的Java类。根据其命名推测,这个类可能是用JNA或者JReg库封装的,提供了诸如读取、写入、删除注册表键值等方法。我们可以...

    java如何操作注册表源代码

    在 Java 中操作注册表,通常需要借助第三方库,例如 JRegistryKey,这是一个开源的 Java 注册表库,它允许 Java 应用程序以类似文件系统的方式访问 Windows 注册表。以下是一些关键知识点: 1. **JRegistryKey 库**...

    java操作注册表简单示例

    在Java编程中,操作注册表是一项相对复杂的任务,因为Java本身并不直接支持对Windows注册表的访问。然而,我们可以通过一些第三方库或者JNA(Java Native Access)来实现这一功能。下面将详细介绍如何使用Java来操作...

    使用java修改windows注册表实用.pdf

    本文介绍了三种使用Java修改Windows注册表的方法:利用`java.util.prefs.Preferences`、使用“regedit /s”命令导入注册表文件以及使用第三方库GDAPI。每种方法都各有优势和局限性,开发者应根据实际需求选择最合适...

    Java操作windows注册表

    另一种方法是直接执行注册表编辑器命令,如`regedit /s regfile.reg`,其中`regfile.reg`是一个包含注册表修改指令的文本文件。这种方法虽然简单直接,但灵活性较低,且需要处理权限问题,因为直接修改注册表可能...

    Java 写注册表

    通过编写Java程序来操作Windows注册表,可以实现灵活地修改系统设置或应用程序的配置。本文将详细介绍如何使用Java进行注册表的操作,并给出具体的代码示例。 #### 二、所需工具与环境准备 1. **下载Registry库:*...

    Java读取注册表所需的jar包和dll文件(32位和64位)

    在Java编程环境中,有时我们需要访问系统的注册表来获取或修改特定的信息,比如软件配置、系统设置等。然而,Java标准库并不直接支持读取Windows注册表。为了实现这个功能,我们可以借助第三方库或者通过JNI(Java ...

    如何清除注册表中的Java安装信息

    最后,清理`deljava.txt`文件以及直接删除与Java相关的注册表项。如果您的系统是64位并且安装的是32位Java,则还需要删除`Wow6432Node`下的相应项。 ### 方法二:手动删除注册表项 如果您对批处理脚本不放心,还...

    java 读取注册表(源码 + jar + dll)

    在Java编程环境中,有时我们需要与操作系统进行交互,例如读取或修改Windows注册表中的信息。在Java标准库中并没有提供直接操作注册表的API,但可以通过一些第三方库来实现这一功能。这里提到的"java 读取注册表...

    JAVA操作注册表的示例,代码简单

    在Java编程语言中,操作注册表通常是用于读取、写入或修改系统设置,这些设置存储在Windows操作系统中。注册表是Windows系统的核心组件,它存储了关于硬件、软件、用户配置等各种信息。本示例将详细介绍如何使用Java...

    使用Java操作Windows注册表

    在Java编程环境中,有时我们需要对Windows系统的注册表进行读写操作,这在处理特定的系统配置或应用程序设置时尤其有用。Java从JDK 1.4版本开始引入了一个名为`Preferences`的类,该类提供了方便的方式来管理和操作...

    修改有关jdk配置的注册表文件

    标题中的“修改有关jdk配置的注册表文件”指的是在Windows操作系统中,通过修改注册表来调整Java Development Kit (JDK) 的配置。注册表是Windows系统存储系统设置和应用程序配置的关键数据库,它对软件的正常运行起...

    java_修改注册表

    这篇博文“java_修改注册表”可能探讨了如何利用Java来操作Windows系统的注册表,这是一个相对高级的话题,因为注册表是操作系统中的核心组成部分,存储着系统和应用程序的配置信息。 首先,我们要明白Java本身并不...

    JAVA操作注册表的JNI库和JAR包jRegistryKey

    在本案例中,我们关注的是一个名为"jRegistryKey"的库,它允许Java应用程序通过JNI(Java Native Interface)来访问和修改Windows注册表。 JNI是Java平台的一部分,它为Java代码提供了与本地代码交互的能力。JNI...

    java 注册表读取与修改(registry.jar)

    Java作为一个跨平台的编程语言,通常不直接支持操作系统级别的功能,比如读取和修改Windows注册表。然而,通过一些特定的库和工具,Java开发者可以实现这样的功能。在这个场景中,我们关注的是"registry.jar",它是...

    Java Windows 操作注册表

    通过以上步骤,我们可以利用Java有效地读取和修改Windows注册表。这个过程涉及到对JNA库的使用,以及对Windows API的理解。对于复杂的注册表操作,可能还需要处理其他数据类型,如REG_BINARY、REG_DWORD等。在实际...

    java源码:Java注册表操作类 jared.tgz

    Java注册表操作类是用于在Java程序中与操作系统注册表进行交互的工具。在Windows操作系统中,注册表是一个存储系统设置、应用程序配置和用户信息的关键数据库。Java本身并不直接支持注册表操作,但通过Java的本地...

Global site tag (gtag.js) - Google Analytics