我正在用 Visual Basic 2008 编写一个小程序,它可以翻转注册表项中特定 DWORD 的值
有问题的注册表项是:
'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\{91801674-82d9-459a-9358-6e5cf3d81d21}\FxProperties'
我正在操作的 dword 是“ {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]”。
我以管理员权限运行程序,将应用程序的清单更改为包括:
<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,说明“对象引用未设置为对象的实例”。
有什么方法可以修改该密钥,而无需以SYSTEM权限运行我的程序?