Announcement

Collapse
No announcement yet.

Problem bei auslesen der Registry (remote)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem bei auslesen der Registry (remote)

    Hi,
    ich möchte mit einer Anwendung die Registry aller PCs im Netzwerk auslesen und die installierten Programme auslesen und die Values der Registry in eine DB speichern.
    Nun habe ich das Problem, dass ich remote die registry nicht auslesen kann, ich bekomme zwar alle Keys, also die einzelnen Programme, aber ich komme nicht an die einzelnen Values dahinter.
    Über ein VBScript funktioniert es, aber wenn ich es in meine Anwendung einbinden möchte kann ich nur auf meine eigene Registry zugreifen, aber nicht auf die eines entfernten Rechners.
    Bin auch relativ neu in VB, daher mache ich möglicherweise irgendwas falsch, aber vielleicht kann mir ja jemand helfen.

    So sieht mein Code zum auslesen der Registry aus:

    Code:
    Dim objReg As Object
    Dim HKLM As String = &H80000002 'HKEY_LOCAL_MACHINE
    Dim strKey As String = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
    Dim tempString, temp, arrSubkeys, subkey,arrSubTypes,temp2
    
    
            objReg = GetObject("winmgmts://" & "cs7E0521" & "/root/default:StdRegProv")
            objReg.EnumKey(&H80000002, strKey, arrSubkeys)
    
            For Each subkey In arrSubkeys
                Dim tempString As String = strKey & subkey
                i = objReg.EnumValues(&H80000002, tempString, temp, arrSubTypes)
                objReg.GetStringValue(HKLM, tempString, "DisplayName", temp2)
                If temp2 <> "" Then
                    temp2 = temp2
                End If
            Next
    Das Problem ist an dieser Stelle schon, dass ich bei meinen eigenen Rechner bei temp2 die DisplayNamen angezeigt bekomme, aber wenn ich auf einen Rechner im Netzwerk zugreife bekomme ich immer "Nothing" zurück.

    Ich hoffe mir kann jemand helfen, danke sonst schon mal für die Mühe

    Grüße Kantoz
    Zuletzt editiert von Kantoz; 28.03.2007, 11:21.

  • #2
    Hallo,

    ...aber nicht auf die eines entfernten Rechners
    für die Authorisierung des Remote-Zugriffs gibt es 2 Möglichkeiten:

    1. Für den Remote-Zugriff wird eine ConnectionOptions-Instanz initialisiert, die beim ManagementScope-Aufruf übergeben wird.

    2. Beim GetObject-Aufruf muss der impersonationLevel mit übergeben werden

    Beispiel für den 1. Weg

    Code:
           ' 1. Assembly System.Management als Referenz zum Projekt hinzufügen  
            ' 2. Imports System.Management hinzufügen   
            Dim aCO As New ConnectionOptions 
            aCO.Username = "Administrator" 
            aCO.Password = "sehrgeheim" 
            Dim aMS As New ManagementScope("\\P4W2K\root\cimv2", aCO) 
            Dim aOQ As New ObjectQuery("SELECT Caption, FreeSpace FROM Win32_LogicalDisk WHERE DeviceID = ""C:""") 
            Dim aMAS As New ManagementObjectSearcher(aMS, aOQ) 
            Dim aObj As ManagementObject 
            For Each aObj In aMAS.Get() 
                MessageBox.Show(aObj.Item("Caption") + aObj.Item("FreeSpace").ToString()) 
            Next
    Beispiel für den 2. Weg:

    ...GetObject("winmgmts:{impersonationLevel=imperso nate}....."

    Comment

    Working...
    X