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文件,本人亲测,安全有效!,不过为了安全建议先备份下注册表,然后再执行操作。注册表也没什么大不了的,最多重新做下系统,不要怕系统出问题,或者事先ghost系统,怎么操作都不怕。不要被...
Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...
修改注册表后可直接运行jar文件。 修改注册表:在HKEY_CLASSES_ROOT下建子目录.jar,在.jar下建字符串Default,值为jmoplus。然后在HKEY_CLASSES_ROOT下依次建子目录jmoplus\Shell\Open\Command,在Command下建字符...
开始---命令行--regedit ( 如果键值没有的时候,自己手动添加 ) 1.找到HKEY_CLASSES_ROOT\http\shell\open\command,双击"默认",将要用浏览器的可执行文件的完全路径输入到这里,例如...知道后我们使用java来操作注册表
Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...
阿里修改java源码 介绍 本文档将帮助您为 DSpace 3.X、4.X 和 5.X 部署和配置 RIOXXv2 应用程序配置文件。 该补丁已使用可配置的人行横道以通用方式实施。 这意味着对现有 DSpace 安装的更改将保持在最低限度。 如果...
java.awt.image 提供创建和修改图像的各种类。 java.awt.image.renderable 提供用于生成与呈现无关的图像的类和接口。 java.awt.print 为通用的打印 API 提供类和接口。 java.beans 包含与开发 beans 有关的类,...
java.awt.image 提供创建和修改图像的各种类。 java.awt.image.renderable 提供用于生成与呈现无关的图像的类和接口。 java.awt.print 为通用的打印 API 提供类和接口。 java.beans 包含与开发 beans 有关的类,...
不需要服务器支持,支持文件/文件夹的传送 (2.00版以上),通讯数据采用 RSA/Blofish 加密 (2.00版以上),十分小巧,简单易用,而且你可以完全免费使用它。目前已有的版本包括: Win32, Win16, MacOS, MacOSX, X11...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
第一章 流与文件 1.1 流 1.1.1 读入和写出字节 1.1.2 完整的流家族 1.1.3 组合流过滤器 1.2 文本输入与输出 1.2.1 如何写出文本输出 ...12.10.2 访问注册表的Java平台接口 12.10.3 以本地方法方式实现注册表访问函数
方法一:下载SHW32.DLL文件覆盖Rose 2003中的该原文件即可。 方法二:修改注册表 1.打开注册表 2.定位到"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Java VM" 3.新建项TrustedClasspath [REG_SZ](字符串值) 4.其...
java.awt.image 提供创建和修改图像的各种类。 java.awt.image.renderable 提供用于生成与呈现无关的图像的类和接口。 java.awt.print 为通用的打印 API 提供类和接口。 java.beans 包含与开发 beans 有关的类,即...
在其中⽂件打开命令中加 ⼊参数"-jar"(⽆引号),修改后的数值类似:""C:\ProgramFiles\Java\jre7\bin\javaw.exe" -jar "%1""(只需要添加-jar参数,⽆需修 改其他信息),保存并退出注册表编辑器。 2、XP下的解决办法 ...
解决双击 jar 和 class文件不能直接在windows命令提示符下运行的问题,不用手动修改注册表和环境变量,把文件的打开方式设为本程序即可
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...