使用JAVA和JNA在64位Win 7上读/写Windows注册表

我正在尝试使用JAVA在64位Win7上读/写 Windows注册表.

首先,我尝试了JDK java.util.prefs.Preferences and its reflection usage.这是一个很好的解决方案,但它只支持读/写REG_SZ类型(字符串)值.

不幸的是,我需要读/写REG_BINARY,所以放弃它.

其次,我尝试了JNI Registry.阅读没问题,但写作通常会失败,因为编写HKLM需要管理员权限.我不知道如何获得JAVA的管理员权限.

最后,我尝试了JNA(Java Native Access)一个用于处理本机库的优秀项目,并通过Advapi32Util和Advapi32支持平台库(platform.jar)中的Windows注册表.它非常好用且简单易用.编写注册表不需要管理员权限.

但是如何在Win7上的64位JVM中读/写32位注册表(在WOW6432Node节点下)?

默认情况下,64位节点在64位JVM中读取/写入,32位节点在32位JVM中读取/写入.

但在64位JVM中,我想读/写32位节点(例如,HKLM-> SOFTWARE-> Wow6432Node-> ODBC).我怎样才能做到这一点?

最佳答案 我得到了答案:

使用64位Windows:

> 32位JVM,访问HKLM-> SOFTWARE-> ODBC将被重定向到HKLM-> SOFTWARE-> Wow6432Node-> ODBC
> 64位JVM,访问HKLM-> SOFTWARE-> ODBC将是HKLM-> SOFTWARE-> ODBC(64位注册表).
>允许使用32位或64位JVM,访问HKLM-> SOFTWARE-> Wow6432Node-> ODBC. (但在C中,win32 exe不能直接访问HKLM-> SOFTWARE-> Wow6432Node-> ODBC,应该访问HKLM-> SOFTWARE->带有wow64标志的ODBC).

点赞