我正在写在Visual Basic 2008年一个小程序,翻转在注册表项中的DWORD特定的值的注册表项访问“[KEY_NAME]”被拒绝
有问题的注册表项是:
'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特权?
你可能正在寻找我在 [这里的问题]中描述的相同的东西(http://stackoverflow.com/questions/21961913/how-to-set-speaker-sound-enhancement-settings)。这是您找到访问音频强化的最佳方式吗? – natenho
@natenho我能够更改注册表中的值,但除了选中/取消选中扬声器属性窗口中的相关复选框之外,它没有任何操作。 – Vinayak
我必须重新启动音频服务才能使其工作'net stop audiosrv',然后'net start audiosrv'或使用[ServiceController类](http://www.csharp-examples.net/restart-windows-service/) 。 – natenho