使用下面的代码,当我使用机器的IP地址("159.99.222.193"
)时,我会报错,
传递计算机的主机名时,它运行良好。传递IP地址需要做什么?
找不到网络路径
at Microsoft.Win32.RegistryKey.Win32ErrorStatic(Int32 errorCode,String str) 在Microsoft.Win32.RegistryKey.OpenRemoteBaseKey(RegistryHive hKey,String machineName,RegistryView视图) 在Microsoft.Win32.RegistryKey.OpenRemoteBaseKey(RegistryHive hKey,String machineName) 在C:\ Users \ h190733 \ source \ repos \ Registry \ Registry \ Program.cs:line 18中的RegistryTest.Program.Main(String [] args)中
using (RegistryKey hive = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, "159.99.222.193"))
{
var key = hive.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\");
string[] names = key.GetSubKeyNames();
foreach (string entry in names)
{
Console.WriteLine(entry.ToString());
}
}
答案 0 :(得分:2)
您不能将IP地址传递给此方法,因为它仅接受主机名。
相反,在调用该方法之前,请尝试通过IP获取主机名。
IPHostEntry entry = Dns.GetHostEntry(ipAddress);
var hostName = entry.HostName;
然后,您可以将主机名var传递到您的RegistryKey.OpenRemoteBaseKey
方法中。
您还可以使用Registry.LocalMachine
静态变量来允许库获取主机名。
答案 1 :(得分:2)
对于您的问题,我有些困惑,OpenRemoteBaseKey的文档指示计算机名称不是IP。
在这种情况下,我认为计算机名称是主机名。
您可以先从ip获取主机名,然后在呼叫中使用它。
答案 2 :(得分:1)
您可以使用静态变量Registry.LocalMachine
而不是打开RegistryKey.OpenRemoteBaseKey
。参见下面的代码
using (var key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\")) {
string[] names = key.GetSubKeyNames();
foreach (string entry in names) {
Console.WriteLine(entry.ToString());
}
}
使用RegistryKey.OpenRemoteBaseKey
的唯一原因是,如果计算机名称是动态传递到方法中的,那么在这种情况下,您将不知道自己正在访问本地计算机还是远程计算机。