【问题标题】:The network path was not found when using IP address instead of hostname of machine使用 IP 地址而不是机器的主机名时找不到网络路径
【发布时间】:2019-08-18 06:10:55
【问题描述】:

使用下面的代码,当我使用机器的 IP 地址 ("159.99.222.193") 时,出现错误,

当传递机器的主机名时,它工作得很好。传递IP地址需要做什么?

找不到网络路径

在 Microsoft.Win32.RegistryKey.Win32ErrorStatic(Int32 errorCode, String str) 在 Microsoft.Win32.RegistryKey.OpenRemoteBaseKey(RegistryHive hKey, String machineName, RegistryView view) 在 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());
                }
            }

【问题讨论】:

  • 我正在输入一些虚拟 ip 地址
  • 我机器的实际IP地址是159.99.222.193
  • 有什么理由不使用静态变量Registry.LocalMachine
  • Registry.LocalMachineOpenRemoteBaseKey 提供错误
  • 看我的回答below

标签: c# registry


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案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?

    【讨论】:

      【解决方案3】:

      您可以使用静态变量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 的唯一原因是机器名称是否动态传递到方法中 - 在这种情况下,您不会知道您正在访问本地机器还是远程机器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-08
        • 1970-01-01
        • 2011-01-10
        相关资源
        最近更新 更多