使用IP地址而不是计算机的主机名时找不到网络路径

时间:2019-03-27 15:42:23

标签: c# registry

使用下面的代码,当我使用机器的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());
                }
            }

3 个答案:

答案 0 :(得分:2)

您不能将IP地址传递给此方法,因为它仅接受主机名。

相反,在调用该方法之前,请尝试通过IP获取主机名。

IPHostEntry entry = Dns.GetHostEntry(ipAddress);
var hostName = entry.HostName;

然后,您可以将主机名var传递到您的RegistryKey.OpenRemoteBaseKey方法中。

您还可以使用Registry.LocalMachine静态变量来允许库获取主机名。

答案 1 :(得分:2)

对于您的问题,我有些困惑,OpenRemoteBaseKey的文档指示计算机名称不是IP。

https://docs.microsoft.com/fr-fr/dotnet/api/microsoft.win32.registrykey.openremotebasekey?view=netframework-4.7.2

在这种情况下,我认为计算机名称是主机名。

您可以先从ip获取主机名,然后在呼叫中使用它。

像这样: How to resolve hostname from local IP in C#.NET?

答案 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的唯一原因是,如果计算机名称是动态传递到方法中的,那么在这种情况下,您将不知道自己正在访问本地计算机还是远程计算机。