RegistryKey.OpenSubKey 抛出 SecurityException
RegistryKey.OpenSubKey throws SecurityException
这个问题可能有重复问题 and here,但从来没有得到充分的回答。
我很高兴重命名了一个用户文件夹,并且不得不更改注册表中的“几个”项。这已经完成,但我很好奇是否可以自动执行此过程。为此,我尝试像这样遍历注册表树:
using Microsoft.Win32;
using System;
using System.Collections.Generic;
namespace RegistryReplacer
{
class Program
{
private static void printKey(RegistryKey key)
{
Console.WriteLine("{0} has {1} sub keys", key.Name, key.SubKeyCount);
}
private static void traverseKey(RegistryKey key)
{
using (key)
{
printKey(key);
string[] subKeyNames = key.GetSubKeyNames();
foreach(string subKeyName in subKeyNames)
{
RegistryKey subKey = key.OpenSubKey(subKeyName);
traverseKey(subKey);
}
}
}
static void Main(string[] args)
{
List<RegistryKey> rootKeys = new List<RegistryKey> {
Registry.LocalMachine,
Registry.CurrentUser,
Registry.ClassesRoot,
Registry.CurrentConfig,
Registry.Users
};
foreach (RegistryKey rootKey in rootKeys)
{
traverseKey(rootKey);
}
}
}
}
我可以遍历树的根(LocalMachine等),但是在某些键(不是全部)上调用OpenSubKey
时,我遇到
System.Security.SecurityException: 'Requested registry access is not allowed.'
我是运行具有管理员权限的应用程序(使用右键单击+“运行作为管理员”或使用this),但这没有帮助。这是在我的个人机器上(64 位 Windows 10 Pro,版本 2004),我是管理员并且有足够的权限通过 regedit 更改注册表。
我做错了什么?
该问题与注册表项所有权有关 - 它很可能具有自定义权限并由 SYSTEM、TrustedInstaller 或其他一些帐户拥有。
这是一个非常好的答案,它深入解释了问题:https://superuser.com/a/493121。
所以,您做的一切都正确,但没有按预期工作。 “这不是错误,这是一个功能”(c)
这个问题可能有重复问题
我很高兴重命名了一个用户文件夹,并且不得不更改注册表中的“几个”项。这已经完成,但我很好奇是否可以自动执行此过程。为此,我尝试像这样遍历注册表树:
using Microsoft.Win32;
using System;
using System.Collections.Generic;
namespace RegistryReplacer
{
class Program
{
private static void printKey(RegistryKey key)
{
Console.WriteLine("{0} has {1} sub keys", key.Name, key.SubKeyCount);
}
private static void traverseKey(RegistryKey key)
{
using (key)
{
printKey(key);
string[] subKeyNames = key.GetSubKeyNames();
foreach(string subKeyName in subKeyNames)
{
RegistryKey subKey = key.OpenSubKey(subKeyName);
traverseKey(subKey);
}
}
}
static void Main(string[] args)
{
List<RegistryKey> rootKeys = new List<RegistryKey> {
Registry.LocalMachine,
Registry.CurrentUser,
Registry.ClassesRoot,
Registry.CurrentConfig,
Registry.Users
};
foreach (RegistryKey rootKey in rootKeys)
{
traverseKey(rootKey);
}
}
}
}
我可以遍历树的根(LocalMachine等),但是在某些键(不是全部)上调用OpenSubKey
时,我遇到
System.Security.SecurityException: 'Requested registry access is not allowed.'
我是运行具有管理员权限的应用程序(使用右键单击+“运行作为管理员”或使用this),但这没有帮助。这是在我的个人机器上(64 位 Windows 10 Pro,版本 2004),我是管理员并且有足够的权限通过 regedit 更改注册表。
我做错了什么?
该问题与注册表项所有权有关 - 它很可能具有自定义权限并由 SYSTEM、TrustedInstaller 或其他一些帐户拥有。
这是一个非常好的答案,它深入解释了问题:https://superuser.com/a/493121。
所以,您做的一切都正确,但没有按预期工作。 “这不是错误,这是一个功能”(c)