奇怪的注册表访问异常

时间:2019-07-15 12:12:21

标签: c# registry

我正在尝试以编程方式(C#)更改注册表中的某些值,但是我一直在遇到Unauthorized-Access-Exceptions。

我要修改的注册表项是由驱动程序安装程序为USB音频设备创建的。该设备(LogiLink USB音箱7.1)有时会“忘记”其设置,我正在寻找一种快速自动重设设置的方法。

使用通常的Microsoft.Win32.Registry方法读取值没问题,但是尝试覆盖某些值似乎很困难。

但是,手动进行更改(使用regedit)没有问题。我确实具有作为用户的管理员权限,并且正在启动所有C#程序,这些程序应修改“以管理员身份”的值,但无济于事。

以下是我尝试过的一些事情:

-在app.manifest中授予我的应用程序管理员权限。

-尝试使用可写= true的Microsoft.Win32方法打开密钥。在这里,我得到一个System.UnauthorizedAccessException。

RegistryKey key =
               RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine,
               RegistryView.Registry64);
            key = key.OpenSubKey(regPath,true);

-使用reg将密钥导出到* .reg文件中。 (始终有效)

String strCmdText = "/C REG EXPORT <KeyPath> <ExportPath> /reg:64";
            System.Diagnostics.Process.Start("CMD.exe", strCmdText);

然后,我可以修改结果文件并尝试使用各种方法将其导入。

String strCmdText = "/C REG IMPORT <PathToReg> /reg:64";
            System.Diagnostics.Process.Start("CMD.exe", strCmdText);

String strCmdText = <PathToReg>;
            System.Diagnostics.Process.Start("REGEDIT.exe", strCmdText);

我在注册表的其他地方尝试了这些方法,它们可以正常工作,但是如果我想将它们应用于USB音频设备的键,它们将失败。进程始终以返回码0结尾。

手动导入已导出和修改的* .reg文件始终有效,并且可以按预期更改设备设置。甚至手动使用CMD-Console也会产生所需的结果。但是,如果我尝试在C#中执行完全相同的操作,则不会发生任何更改(即使具有管理员权限)。

如果有人对此有想法,我将感到非常高兴。谢谢。

0 个答案:

没有答案