Registry Wert von einem anderen Computer im Netzwerk auslesen

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von haiflosse1.

    Registry Wert von einem anderen Computer im Netzwerk auslesen

    Hallo!
    Ich möchte einen Registry Key von einem anderen Computer auslesen und habe folgendes versucht:

    VB.NET-Quellcode

    1. Imports System.Management
    2. ....
    3. Private sub registry()
    4. Dim remoteComputerName As String = "desktop-bt6ae6p"
    5. Dim remoteKeyName As String = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer"
    6. Dim remoteValueName As String = "HideSCANetwork"
    7. Dim remoteDefaultValue As Object = Nothing
    8. Dim options As New ConnectionOptions()
    9. options.Impersonation = ImpersonationLevel.Impersonate
    10. options.EnablePrivileges = True
    11. options.Username = "adminsitrator"
    12. options.Password = "pwd"
    13. Dim scope As New ManagementScope("\\" & remoteComputerName & "\c$", options)
    14. scope.Connect()
    15. Dim regKey As RegistryKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, remoteComputerName, RegistryView.Default)
    16. Dim subKey As RegistryKey = regKey.OpenSubKey(remoteKeyName, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.FullControl)
    17. Dim remoteValue = subKey.GetValue(remoteValueName, remoteDefaultValue)
    18. end sub


    Leider bekomme ich die Meldung, dass
    ConnectionOptions nicht definiert ist sowie
    ImpersonationLevel nicht deklariert ist. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich und
    ManagementScope ist nicht defniert.

    Hoffe es kann mir jemand weiterhelfen, wie ich auf eine Registry eines anderen Netzwerkcomputers (Windows 10) zugreifen kann.

    Danke
    Wenn ich mit der Maus über ConnectionOptions gehe, wird mir als Korrekturvorschlag das Richtige angezeigt.
    Bilder
    • Vorschlag.png

      24,69 kB, 852×245, 122 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Danke für die Antwort.
    Ich habe versucht System.Management zu importieren, da bekomme ich aber folgende Meldung:
    Imports-Anweisung ist unnötig
    Der in Imports "System.Management" angegebene Namespace oder Typ enthält keine öffentlichen member oder kann nicht gefunden werden. Stellen Sie sicher, dass der Namespace oder der Typ definiert ist und mindestens einen öffentlichen Member enthält, und dass der importierte Elementname keine Alias verwendet.
    Falls du eine Net(nicht Framework) Anwendung hast, wird dir in der Fehlerkorrektur ein Nuget-Packet angeboten(System.Management), das dann installieren. Bei NetFX geht das wie Vaporized schon gezeigt hat.

    Wie ist dein Projekt eingestellt? Welches Framework, bzw. welche NET Version?
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
    Nur das Imports allein bringt es nicht. Mit der gezeigten Option wird außerdem in den Projekteigenschaften bei den Verweisen die System.Management-DLL eingebunden, die dann die eigentliche Funktionalität mitbringt. Die Imports-Zeile vereinfacht nur das Schreiben der Codezeilen ohne Namespaceangabe.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Das fiese bei System.Management ist, wäre der Namespace System.Management gänzlich unbekannt, würde auch der Import als Fehler angezeigt werden. Auf ein wenig können wir aber auch ohne Verweis zugreifen, aber die wichtigen Sachen da braucht man den Verweis.

    Siehe Screenshot, das ist ohne Verweis auf System.Management.dll
    Bilder
    • Unbenannt.png

      44,46 kB, 896×490, 125 mal angesehen
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
    Danke für die Antwort.
    Ich habe mit vb forms mit Framework 6.0 mit visual Studio 2022 erstellt.
    Wie kann ich die fehlenden System.Management-DLL einbinden bzw. installieren?

    -------------
    Ich habe jetzt versucht über die Eigenschaften des Projektes bei References dort System.Management hinzuzufügen. Es steht nun System.Management in der Liste, aber im Programm hat sich leider nichts geändert.

    Danke

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „haiflosse1“ ()

    Framework 6 gibt es nicht. das höchste Framework ist 4.8.x, jedenfalls 5 gibt es definitiv nicht. NET ist nicht NET-Framework. Framework ist das alte und wird nicht mehr weiter entwickelt, hat mit dem neuen NET nichts zu tun.

    Bei Framework von Hand, wenn das bei dir mit der Fehlerkorrektur nicht geht.(also kein Verweis hinzugefügt wird)
    Projektmappen-Explorer, rechtsklick references, Add Refernce, dort den Reiter Assemblies wählen, dann bei System.Management ein haken rein machen.

    Bei NET
    Hovere über der Schlangenlinie, und installiere das vorgeschlagene Packet.
    Oder im Projektmappen-Explorer eine rechtsklick auf das Projekt, dann Manage Nuget Packages und das von Hand machen.
    Bilder
    • Unbenannt.jpg

      102,84 kB, 1.194×641, 109 mal angesehen
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DTF“ ()

    Danke habe es jetzt geschafft es zu installieren.
    Ich komme jetzt bis zur Zeile

    VB.NET-Quellcode

    1. Dim scope As New ManagementScope("\\" & remoteComputerName & "\c$", options)
    2. scope.Connect()


    ich habe auch

    VB.NET-Quellcode

    1. Dim scope As New ManagementScope("\\" & remoteComputerName & "\root\default", options)
    2. scope.Connect()


    versucht.

    Da bekomme ich folgende Meldung:
    Der RPC-Server ist nicht verfügbar.
    Den Computer desktop-bt6ae6p ist aber per ping erreichbar.

    Vielleicht kann mir jemand nochmals weiterhelfen.
    Danke
    Bilder
    • reg.png

      22,79 kB, 739×318, 101 mal angesehen
    Vielleicht braucht es auch eine Remotezugriffserlaubnis. Wenn mir jemand aus dem Netzwerk ohne meine Einwilligung meine Registry durcheinanderwirbelt … wäre gruselig.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ist zufällig Win10 Home im Einsatz? Manche Netzwerksachen sind nur in der Pro Version drin. Das könnte muss aber nicht die Ursache sein. Ich kann morgen mal jemanden Fragen, vllt. weis der mehr darüber.

    Edit @haiflosse1
    Dieser Dienst läuft?
    Bilder
    • Unbenannt.jpg

      29,96 kB, 873×54, 128 mal angesehen
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
    Ich hab nen kollegen gefragt, der sagte mir wenn die RPC und DCOM Dienste laufen wie auch der RemoteRegistry Dienst sollte das gehen. Ich habe das ausprobiert und kann lesen und schreiben, hab nen alten Laptop dafür prepariert. Zum schreiben muss die Anwendung aber mit Admin-Rechten gestartet werden(Bzw. das Studio beim Debugging), sonst geht nur lesen, solltest also eine Manifest anlegen und die Rechte fordern, damit beim starten der App die UAC aufpopt.

    VB.NET-Quellcode

    1. Dim remoteComputerName As String = "DESKTOP-RANDOM1"
    2. Dim options As New ConnectionOptions()
    3. options.Impersonation = ImpersonationLevel.Identify 'hier hattest du ImpersonationLevel.Impersonate
    4. options.EnablePrivileges = True
    5. options.Username = "derAccountDesUsers" 'bei mir ein account mit adminrechten auf dem zielsystem,
    6. options.Password = "dasPAsswortDesUsers" '
    7. Dim scope As New ManagementScope("\\" & remoteComputerName & "\", options) 'hier hattest du[tt] \c$[/tt] hinter remoteComputerName führte bei mir zu einem Fehler
    8. 'wobei wird das wohl nicht brauchen
    9. Dim hklm As RegistryKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, remoteComputerName, RegistryView.Default)
    10. 'dein pfad war "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer"
    11. 'HKEY_LOCAL_MACHINE ist zu viel, wir haben bereits den "HKLM"-Key
    12. Dim explorer As RegistryKey = hklm.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer", RegistryKeyPermissionCheck.ReadWriteSubTree)
    13. For Each k As String In explorer.GetValueNames
    14. RichTextBox1.AppendText(k & Environment.NewLine)
    15. Next


    Mit diesem Code geht es, aber warum der RPC Server bei dir nicht erreichbar ist, da kann ich nichts zu sagen. Da musst du auf dem Zielsystem schauen. Getestet habe ich den Code auf einem System mit Windows 10 Home, das Zielsystem war Windows 10 Pro. Einen Dienst hab ich aktiviert, also diesen RemoteRegistry-Dienst auf dem Zielsystem, der Rest ist standard. Also frisches Windows. Kannst ja mal schauen wie die Dienste standard eingestellt sind(gibt Listen) und mit deinen Vergleichen.

    Edit @haiflosse1
    Ich hab das eben auch auf dem gleichen System probiert, also das System angegeben auf dem die App läuft, das ging auch
    Bilder
    • Unbenannt.jpg

      30,63 kB, 370×317, 112 mal angesehen
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „DTF“ ()

    Danke für die Antwort.
    Ich habe deinen Code versucht.
    Bei der Zeile

    VB.NET-Quellcode

    1. Dim hklm As RegistryKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, remoteComputerName, RegistryView.Default)

    bekomme ich dann folgende Meldung (siehe Anhang)
    Der Username und Passwort ist der Hauptadministrator vom Computer auf den ich zugreifen möchte.

    Die Frage ist dann auch wie ich den DWORT "HideSCANetwork" auslesen kann.

    Danke
    Bilder
    • fehler2.png

      66,32 kB, 1.483×366, 113 mal angesehen