[英]Connecting to registry remotely, and getting exceptions
我继承了旧的一段旧代码(按旧版本,我的意思是警惕,除了WTF-y以外,还有许多未记录的错误修复程序),其中有一部分给我带来了麻烦。 这是它连接到远程注册表以获取添加/删除程序键的方法:
try
{
remoteKey = RegistryKey.OpenRemoteBaseKey(
RegistryHive.LocalMachine, addr.Value).OpenSubKey(
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall");
return 1;
}
catch (IOException e)
{
IOException myexception = e;
//Console.WriteLine("{0}: {1}: {2}",
// e.GetType().Name, e.Message, addr.Value);
return 2;
}
catch (UnauthorizedAccessException e)
{
UnauthorizedAccessException myexception = e;
//Console.WriteLine("{0}: {1}: {2}",
// e.GetType().Name, e.Message, addr.Value);
return 3;
}
catch (System.Security.SecurityException e)
{
System.Security.SecurityException myexception = e;
//Console.WriteLine("{0}: {1}: {2}",
// e.GetType().Name, e.Message, addr.Value);
return 4;
}
现在,我有两个问题:
我知道为什么IOException-如果它是非Windows计算机,则会抛出该异常。 UnauthorizedAccessException和SecurityException之间的区别我不清楚。 任何人有任何想法吗?
在没有人想到您可能无法使用本地登录进行所有操作之前,就设计了全部代码。 无论如何,我无法弄清楚如何进行身份验证以远程连接到注册表,并且当无法从WMI获取此信息时,此代码似乎仅在一种情况下使用。
任一个的帮助都会很棒。
您可能必须使用模拟来更改调用远程注册表方法的线程的凭据。 有关MSDN的一些信息,请参见此处( 链接 )。 基本上,您的线程具有一个安全上下文,用于进行托管和非托管调用。
根据MSDN ,OpenSubKey 不会引发 UnauthorizedAccessException。 因此,我认为不需要。
John指向MSDN的指针回答了UnauthorizedAccessException的用途-仅当您尝试使用OpenRemoteBaseKey远程访问密钥时,该指针才会出现。
我们对更改计算机上的安全上下文有些警惕-我在这里找到了有关使用WMI(我们已经在绝大多数繁重的工作中使用它)访问注册表的参考,所以我可以尝试相反。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.