我正在尝试使用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).