vb.net - 对注册表项 '[KEY_NAME]' 的访问被拒绝

标签 vb.net registry unauthorizedaccessexcepti

我正在 Visual Basic 2008 中编写一个小程序,用于翻转注册表项中特定 DWORD 的值

有问题的注册表项是:

'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\{91801674-82d9-459a-9358-6e5cf3d81d21}\FxProperties'

我正在操作的双字是“{e0a941a0-88a2-4df5-8d6b-dd20bb06e8fb},4

这是我编写的用于设置 DWORD 值的代码行:

Dim keyString = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\{91801674-82d9-459a-9358-6e5cf3d81d21}\FxProperties"
My.Computer.Registry.SetValue(keyString, "{ad75efc0-8f48-4285-bfa8-40fb036cdab2},2", "00000000")

但我在运行时收到UnauthorizedAccessException,指出“对注册表项 [KEY_NAME] 的访问被拒绝。”

我以管理员权限运行该程序,更改了应用程序的 list 以包括:

<requestedExecutionLevel level="highestAvailable" uiAccess="false" />

但这也不起作用。所以我搜索了几个论坛并尝试了这个:

Dim rkLM As RegistryKey = Registry.LocalMachine
Dim pRegKey As RegistryKey = rkLM.OpenSubKey("\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\{91801674-82d9-459a-9358-6e5cf3d81d21}\FxProperties", True)
pRegKey.SetValue("{ad75efc0-8f48-4285-bfa8-40fb036cdab2},2", "00000000")

但这向我抛出了一个NullReferenceException,指出“对象引用未设置到对象的实例。”

有什么方法可以修改该 key ,而无需使用SYSTEM权限运行我的程序?

最佳答案

您可能应该尝试在 list 中使用 requireAdministrator,因为 highestAvailable 实际上可能不是管理员。

我还会尝试指定数据类型(在你的情况下我认为它是二进制的):

My.Computer.Registry.SetValue(keyString, _
"{ad75efc0-8f48-4285-bfa8-40fb036cdab2},2", _ 
"00000000", _
RegistryValueKind.Binary)

但是您设置的值可能需要是字节数组(您可以尝试其他方法)

关于vb.net - 对注册表项 '[KEY_NAME]' 的访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13029812/

相关文章:

c# - 如何访问注册表并循环访问 C 中的键(提供的示例 C# 代码)?

为所有用户或仅为当前用户安装 Python?

c# - 尝试使用 Directory .EnumerateFiles ("*.jpg", SearchOption.AllDirectories);

c# - 为什么访问路径被拒绝?

asp.net - 我可以在没有管理员用户的情况下使用 Microsoft.Web.Administration 中的 ServerManager 作为应用程序池标识吗

vb.net - 在 .NET 中获取使用 CreateObject 启动的进程的进程 ID

vb.net - 确定谁阅读了共享邮箱中的邮件

delphi - 如何在不重新启动的情况下刷新注册表项?

vb.net - 如何交换对象列表中的索引

c# - 将文本添加到视频中并保存输出