You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Java读取Windows注册表整数值 读取EnableSecuritySignature返回null怎么办

返回null的常见原因

  • 数据类型不匹配:你调用的readString方法仅支持读取REG_SZ类型的字符串注册表值,而EnableSecuritySignature是REG_DWORD类型的数值,类型不匹配导致读取失败返回null。
  • 32/64位注册表重定向:如果你运行的是32位版本的Java虚拟机,在64位Windows系统下访问HKEY_LOCAL_MACHINE下的系统路径时,会被系统自动重定向到Wow6432Node对应的32位注册表分支,而你的目标键存在于64位分支,因此读取不到。
  • 权限不足:该注册表项属于系统服务配置项,部分情况下普通用户权限的进程无法读取,会被系统拦截返回空值。

解决方法

  1. 替换读取方法:调用WinRegistry类中读取数值类型的readDword方法,替代原来的readString方法,匹配目标值的REG_DWORD类型。
  2. 适配64位注册表视图:修改WinRegistry类的底层实现,在调用Windows原生API访问注册表时,给访问权限参数增加KEY_WOW64_64KEY(值为0x0100)标记,强制访问64位注册表分支,避开系统重定向。示例权限修改:将原来的KEY_READ权限修改为KEY_READ | 0x0100。
  3. 提升运行权限:运行Java程序时,右键选择「以管理员身份运行」启动对应的CMD、IDE或者程序启动器,确保进程有足够的系统权限读取该配置项。

修改后的参考代码如下(假设已调整WinRegistry类适配64位视图):

int value = WinRegistry.readDword(
    WinRegistry.HKEY_LOCAL_MACHINE,                             
    "SYSTEM\\CurrentControlSet\\Services\\LanmanWorkstation\\Parameters",           
    "EnableSecuritySignature");                                              
System.out.println("EnableSecuritySignature = " + value);

内容的提问来源于stack exchange,提问作者Radu Aramă

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:54:07