需要修改的注册表项
[HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Run] 开机自动运行程序
[HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/RunOnce] 开机自动运行程序 且 仅运行一次
[HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/RunServices] 开机自动运行服务
JDK 从1.4开始提供操作 Windows 的 API 是 Preferences,因为这个 API 也是跨平台的,所功能比较弱,在 Win32 下只能用来操作 HKCU/Software/JavaSoft 和 HKLM/Software/JavaSoft 下及子节点的数据。
自由访问注册表其他键的值光用 Java 是做不到的,必然方案就是 JNI,这里我使用的是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,动态库就是本地代码实现。
com.ice.jni.registry.Registry.main() 就是 registry 的示例代码,动态库 ICE_JNIRegistry.dll 也是在这个类的静态块中被加载的,记得要把 ICE_JNIRegistry.dll 放在它能够被加载的位置上,比如你把 registry-3.1.3.zip 解压到 c:/registry-3.1.3,在命令行下你可以进入到这个目录中,并执行。
代码: