You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

以管理员身份运行的应用为何无法访问部分注册表项?

为什么管理员身份运行的应用仍无法访问部分注册表键?

嘿,这问题我之前也碰到过!你遇到的核心问题是Windows的注册表重定向机制在作祟,和管理员权限没关系哦。

背后的原因

在64位的Windows 10系统中,为了兼容32位旧程序,系统会自动对HKLM\SOFTWARE这类注册表路径做重定向:

  • 当32位程序访问HKLM\SOFTWARE时,系统会偷偷把请求转向HKLM\SOFTWARE\Wow6432Node这个专门给32位程序用的分支。
  • 但你在注册表编辑器里看到的那个Render子键,其实是存放在64位原生的HKLM\SOFTWARE分支里的——所以32位程序哪怕以管理员身份运行,也看不到它。

解决办法

给你两个可行的方案:

  1. 编译成64位程序
    直接把你的项目目标平台改成x64,这样程序就会直接访问64位的注册表路径,不用再被重定向,自然能找到Render子键。

  2. 强制32位程序访问64位注册表分支
    如果必须保持32位编译,可以在打开注册表键的时候指定RegistryView.Registry64参数,修改后的代码大概是这样:

    var hive = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
    var renderKey = hive.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render");
    

    这样就能绕过重定向,让32位程序直接读取64位的注册表内容。

另外补充个小细节:默认打开的注册表编辑器是64位版本的,所以你能看到那个Render子键;如果你开32位的regedit(路径是C:\Windows\SysWOW64\regedit.exe),同样也找不到它,这也能侧面验证重定向的问题。

内容的提问来源于stack exchange,提问作者Dave F

火山引擎 最新活动