`
a1520708
  • 浏览: 26796 次
  • 性别: 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();
			}
分享到:
评论

相关推荐

    189个常用修改注册表的REG文件打包

    189个常用修改注册表的REG文件,本人亲测,安全有效!,不过为了安全建议先备份下注册表,然后再执行操作。注册表也没什么大不了的,最多重新做下系统,不要怕系统出问题,或者事先ghost系统,怎么操作都不怕。不要被...

    JAVA上百实例源码以及开源项目

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    PPC JAVA模拟器 JMOPlus

    修改注册表后可直接运行jar文件。 修改注册表:在HKEY_CLASSES_ROOT下建子目录.jar,在.jar下建字符串Default,值为jmoplus。然后在HKEY_CLASSES_ROOT下依次建子目录jmoplus\Shell\Open\Command,在Command下建字符...

    java 修改默认浏览器

    开始---命令行--regedit ( 如果键值没有的时候,自己手动添加 ) 1.找到HKEY_CLASSES_ROOT\http\shell\open\command,双击"默认",将要用浏览器的可执行文件的完全路径输入到这里,例如...知道后我们使用java来操作注册表

    JAVA上百实例源码以及开源项目源代码

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    阿里修改java源码-RIOXX:力拓

    阿里修改java源码 介绍 本文档将帮助您为 DSpace 3.X、4.X 和 5.X 部署和配置 RIOXXv2 应用程序配置文件。 该补丁已使用可配置的人行横道以通用方式实施。 这意味着对现有 DSpace 安装的更改将保持在最低限度。 如果...

    JavaAPI1.6中文chm文档 part1

    java.awt.image 提供创建和修改图像的各种类。 java.awt.image.renderable 提供用于生成与呈现无关的图像的类和接口。 java.awt.print 为通用的打印 API 提供类和接口。 java.beans 包含与开发 beans 有关的类,...

    JAVA_API1.6文档(中文)

    java.awt.image 提供创建和修改图像的各种类。 java.awt.image.renderable 提供用于生成与呈现无关的图像的类和接口。 java.awt.print 为通用的打印 API 提供类和接口。 java.beans 包含与开发 beans 有关的类,...

    修改注册表的包yangdoudou

    不需要服务器支持,支持文件/文件夹的传送 (2.00版以上),通讯数据采用 RSA/Blofish 加密 (2.00版以上),十分小巧,简单易用,而且你可以完全免费使用它。目前已有的版本包括: Win32, Win16, MacOS, MacOSX, X11...

    java开源包10

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    Java核心技术II(第8版)

    第一章 流与文件 1.1 流 1.1.1 读入和写出字节 1.1.2 完整的流家族 1.1.3 组合流过滤器 1.2 文本输入与输出 1.2.1 如何写出文本输出 ...12.10.2 访问注册表的Java平台接口 12.10.3 以本地方法方式实现注册表访问函数

    Rational rose下载uml建模专用

    方法一:下载SHW32.DLL文件覆盖Rose 2003中的该原文件即可。 方法二:修改注册表 1.打开注册表 2.定位到"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Java VM" 3.新建项TrustedClasspath [REG_SZ](字符串值) 4.其...

    Java 1.6 API 中文 New

    java.awt.image 提供创建和修改图像的各种类。 java.awt.image.renderable 提供用于生成与呈现无关的图像的类和接口。 java.awt.print 为通用的打印 API 提供类和接口。 java.beans 包含与开发 beans 有关的类,即...

    java程序双击运行-双击jar文件运行程序.pdf

    在其中⽂件打开命令中加 ⼊参数"-jar"(⽆引号),修改后的数值类似:""C:\ProgramFiles\Java\jre7\bin\javaw.exe" -jar "%1""(只需要添加-jar参数,⽆需修 改其他信息),保存并退出注册表编辑器。 2、XP下的解决办法 ...

    Java程序启动器 Java program launcher.exe

    解决双击 jar 和 class文件不能直接在windows命令提示符下运行的问题,不用手动修改注册表和环境变量,把文件的打开方式设为本程序即可

    java开源包4

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包101

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包11

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包6

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

Global site tag (gtag.js) - Google Analytics