0

如何使用 C# 添加/更改 OEMInformation 注册表项?

我尝试使用此代码,但它返回错误:

 RegistryKey myKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Microsoft\Windows\CurrentVersion\OEMInformation", true);
 myKey.SetValue("manufacturer", "Asus", RegistryValueKind.String);

正在返回此错误:

mscorlib.dll 中发生“System.Security.SecurityException”类型的未处理异常

附加信息:不允许请求的注册表访问。

编辑:
也试过这段代码:

    Microsoft.Win32.RegistryKey key;
    key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Microsoft\Windows\CurrentVersion\OEMInformation");
    key.SetValue("manufacturer", "Asus");
    key.Close();

但此代码也返回一个错误:
在 mscorlib.dll 中发生“System.UnauthorizedAccessException”类型的未处理异常

附加信息:无法写入注册表项。

我的应用程序已经使用以下代码以管理员身份运行:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
4

2 回答 2

1

Visual Studio 还必须在管理员模式下运行。

于 2013-09-11T13:43:29.737 回答
0

您必须以管理员身份运行程序才能访问(修改)LocalMachine 密钥。(例如,将清单添加到您的程序http://msdn.microsoft.com/en-us/library/bb756929.aspx

或访问此特定注册表项中的每个项 ( http://technet.microsoft.com/en-us/library/cc728310(v=ws.10).aspx )

编辑:确保您的程序以提升的权限运行。我创建了简单的控制台程序,并像魅力一样工作。

除了您的编辑:如果您只使用一个参数打开注册表项,则意味着您只想阅读(http://msdn.microsoft.com/en-us/library/z9f66s0a.aspx)所以您必须像以前一样使用它(有两个参数并将第二个设置为“true”)

于 2013-09-11T13:46:18.057 回答