【发布时间】:2013-02-04 23:50:37
【问题描述】:
我试图在 Windows 上使用代码 (c#) 从某些注册表项中读取一些值,我发现我无法读取这些值的原因是因为管理员用户没有权限:
所以我手动导航到给我带来麻烦的注册表项,这就是权限选项卡的样子:
这让我想到了如何以用户“系统”的身份运行进程?这听起来很奇怪,但显然有系统用户对吗?我知道如何以管理员身份运行,但也许也可以以系统身份运行。
编辑
这是我的代码。基本上我会遍历所有的注册表项:
class Program
{
// class to store reg key.
[Serializable]
[DebuggerDisplay("Name = {Name}, Val = {value}, type={type}")]
class MyRegKey
{
public string Name;
public object value;
public RegistryValueKind type;
public List<MyRegKey> SubKeys = new List<MyRegKey>();
public List<MyRegKey> Values = new List<MyRegKey>();
}
static MyRegKey root = new MyRegKey();
static void TraverseTree(RegistryKey key, MyRegKey temp)
{
foreach (var v in key.GetValueNames())
{
var kind = key.GetValueKind(v);
var value = key.GetValue(v, null);
var name = v;
temp.Values.Add(new MyRegKey { Name = name, value = value, type = kind });
}
var x = key.GetSubKeyNames();
for (var i = 0; i < x.Length; i++)
{
RegistryKey productKey;
productKey = key.OpenSubKey(x[i], false); // <--------- Code crashes here
if (productKey != null)
{
var y = new MyRegKey() { Name = productKey.Name };
temp.SubKeys.Add(y);
Foo(productKey, y);
}
}
}
public static void Main()
{
var key = Registry.LocalMachine;
root.Name = key.Name;
TraverseTree(key, root);
}
}
我正在以管理员身份运行该代码...
这是我的程序如何崩溃的图像,说明我没有权限:
【问题讨论】:
-
我在这里可能错了,但据我所知,生成系统进程的唯一方法是在系统帐户下运行 Windows 服务,或者从此类服务启动进程。
-
以管理员用户身份读取注册表应该没有问题,您能否显示获取注册表项的代码,您是否使用
Registry类? -
我很快就会发布我的代码......是的,我正在使用注册表类
-
您是否右键单击 Visual Studio 并选择以管理员身份运行?从具有管理员访问权限的帐户运行是不够的,必须进行管理员提升。
-
psexec -i -d -s c:\YouApp.exe 或者您需要知道如何编写将充当系统帐户的代码
标签: c# windows permissions administrator