0
votes

Le chemin réseau n'a pas été trouvé lors de l'utilisation de l'adresse IP au lieu du nom d'hôte de la machine

En utilisant le code ci-dessous, lorsque j'utilise l'adresse IP ( "159.99.222.193" ) de la machine, j'obtiens une erreur,

Lorsque je passe le nom d'hôte de la machine, cela fonctionne bien . Que faut-il faire pour transmettre l'adresse IP?

Le chemin réseau est introuvable

sur Microsoft.Win32.RegistryKey.Win32ErrorStatic (Int32 errorCode, String str) à Microsoft.Win32.RegistryKey.OpenRemoteBaseKey (RegistryHive hKey, String machineName, vue RegistryView) à Microsoft.Win32.RegistryKey.OpenRemoteBaseKey (RegistryHive hKey, String machineName) à RegistryTest.Program.Main (String [] args) dans C: \ Users \ h190733 \ source \ repos \ Registry \ Registry \ Program.cs: ligne 18

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());
                }
            }


5 commentaires

Je mets mon adresse IP factice


l'adresse IP réelle de ma machine est 159.99.222.193


Une raison de ne pas utiliser la variable statique Registry.LocalMachine pour la même chose?


Registry.LocalMachine donnant une erreur pour OpenRemoteBaseKey


Voir ma réponse ci-dessous


3 Réponses :


2
votes

Vous ne pouvez pas transmettre l'adresse IP à cette méthode car elle n'accepte que le nom d'hôte.

À la place, essayez de récupérer le nom d'hôte par IP avant d'appeler la méthode.

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

Ensuite, vous pouvez passer le nom d'hôte var dans votre méthode RegistryKey.OpenRemoteBaseKey .

Vous pouvez également utiliser le Registry.LocalMachine variable statique pour permettre à la bibliothèque de récupérer le nom d'hôte.


0 commentaires

2
votes

Je suis un peu confus au sujet de votre question, la documentation d'OpenRemoteBaseKey indique le nom de la machine et non IP.

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

Je présume dans ce contexte que le nom de la machine est hostname.

Vous pouvez obtenir le nom d'hôte d'ip avant et l'utiliser dans votre appel.

Comme ça: Comment résoudre le nom d'hôte à partir d'une adresse IP locale en C # .NET?


0 commentaires

1
votes

Vous pouvez utiliser la variable statique Registry.LocalMachine au lieu d'ouvrir RegistryKey.OpenRemoteBaseKey . Voir le code ci-dessous

using (var key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\")) {
    string[] names = key.GetSubKeyNames();
    foreach (string entry in names) {
        Console.WriteLine(entry.ToString());
    }
}

La seule raison d'utiliser RegistryKey.OpenRemoteBaseKey , est si le nom de la machine est passé dynamiquement dans la méthode - dans ce cas, vous ne le feriez pas sachez que vous accédez à une machine locale ou distante.


0 commentaires