1

我有一个现有程序,它要求使用以下方式访问注册表:

RegistryPermission permission = new RegistryPermission(RegistryPermissionAccess.AllAccess, strCheckPermission);
permission.Demand();

这适用于 Windows XP 直到 Windows 7,以及 Windows Server 2003 和 2008。但是,当我在 Windows 8 上运行它时,当我要求这个权限集时,我仍然无法创建子键

Registry.LocalMachine.OpenSubKey("Software", true).CreateSubKey("myCompany")

有谁知道这里出了什么问题?

更新:异常的堆栈跟踪:

System.UnauthorizedAccessException: Cannot write to the registry key.
   at Microsoft.Win32.RegistryKey.EnsureWriteable()
   at Microsoft.Win32.RegistryKey.CreateSubKey(String subkey, RegistryKeyPermissionCheck permissionCheck, RegistrySecurity registrySecurity)
4

1 回答 1

3

您将代码访问安全权限与 Windows 权限混为一谈。CAS 不会做任何事情来让您访问注册表项,它只是验证权限没有被禁用。大多数 .NET 应用程序在完全信任的情况下运行,这很少见。

这是一个窗口访问权限问题,您的用户帐户根本没有写入密钥的权限。这并不罕见,HKLM 密钥只能使用 UAC 提升来编写。您需要嵌入清单以请求提升,请查看此答案以获取详细信息。

另一个 Windows 8 特定细节是 WinRT,“Windows 应用商店”应用程序将永远无法编写此类密钥,没有解决方法。

于 2012-09-06T12:33:57.610 回答