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()); } }
3 Réponses :
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.
Je suis un peu confus au sujet de votre question, la documentation d'OpenRemoteBaseKey indique le nom de la machine et non IP.
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?
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.
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 pourOpenRemoteBaseKey
Voir ma réponse ci-dessous