我正在 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/