VB: Über 32bit CMD Registry Key aus 64bit RegHive auslesen

  • VBScript

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

    VB: Über 32bit CMD Registry Key aus 64bit RegHive auslesen

    Hallo zusammen

    Ich muss mittels Visual Basic in der Registry auslesen, ob es bestimmter Key bereits vorhanden ist. (Wenn ja, keine SW-Installation - Wenn nein, Installation..)
    Schwierigkeit: Das Script wird mit einem 32bit Agent ausgeführt also mit C:\Windows\SysWOW64\cmd.exe und sieht daher 32bit Registrystruktur. Der Teil, den ich auslesen muss, befindet sich allerdings in der 64bit Struktur.

    Ich muss auslesen, ob der Key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\LMAgent vorhanden ist. Am besten eine Funktion, die allgemein gilt. Also dass man einen Übergabewert (Key) übergeben kann, welcher dann von der Funktion geprüft wird..

    Ich habe schon einiges ausprobiert mit StdRegProv und EnumValues, aber bin bisher immer gescheitert.
    Kann mir da evlt. jemand weiterhelfen? Hat da jemand Erfahrung?

    Meine angefangene Funktion:

    Function KeyExists64(sRegHive, sRegKey, sArchtct)

    Dim objCtx, objLocator, objServices, objStdRegProv, Inparams, Outparams, array, value
    Dim Method
    fRcode = -1
    On Error Resume Next

    Set objCtx = CreateObject("WbemScripting.SWbemNamedValueSet")
    objCtx.Add "__ProviderArchitecture", sArchtct
    Set objLocator = CreateObject("Wbemscripting.SWbemLocator")
    Set objServices = objLocator.ConnectServer("","root\default","","",,,,objCtx)
    Set objStdRegProv = objServices.Get("StdRegProv")

    Method = "EnumKey"
    Set Inparams = objStdRegProv.Methods_(Method).Inparameters
    Inparams.Hdefkey = sRegHive
    Inparams.Ssubkeyname = sRegKey
    'Inparams.Svaluename = sRegValue
    WScript.Echo fRcode
    Set Outparams = objStdRegProv.ExecMethod_(Method,Inparams,,objCtx)

    For each value In Outparams
    WScript.Echo value
    Next
    WScript.Echo Outparams.ReturnValue
    fRcode = Outparams.ReturnValue

    set objCtx = Nothing

    set objLocator = Nothing

    Meine Funktion um Values auszulesen:

    Function ReadRegEntry64(sRegHive, sRegKey, sRegValue, sKeyType, sArchtct)

    Dim objCtx, objLocator, objServices, objStdRegProv, Inparams, Outparams
    Dim Method
    fRcode = -1
    On Error Resume Next

    Set objCtx = CreateObject("WbemScripting.SWbemNamedValueSet")
    objCtx.Add "__ProviderArchitecture", sArchtct
    Set objLocator = CreateObject("Wbemscripting.SWbemLocator")
    Set objServices = objLocator.ConnectServer("","root\default","","",,,,objCtx)
    Set objStdRegProv = objServices.Get("StdRegProv")

    Select Case sKeyType
    Case "REG_SZ"
    Method = "GetStringValue"
    Set Inparams = objStdRegProv.Methods_(Method).Inparameters
    Inparams.Hdefkey = sRegHive
    Inparams.Ssubkeyname = sRegKey
    Inparams.Svaluename = sRegValue
    Set Outparams = objStdRegProv.ExecMethod_(Method,Inparams,,objCtx)
    ReadRegEntry64 = Outparams.sValue
    fRcode = Outparams.ReturnValue
    Case "REG_DWORD"
    Method = "GetDWORDValue"
    Set Inparams = objStdRegProv.Methods_(Method).Inparameters
    Inparams.Hdefkey = sRegHive
    Inparams.Ssubkeyname = sRegKey
    Inparams.Svaluename = sRegValue
    Set Outparams = objStdRegProv.ExecMethod_(Method,Inparams,,objCtx)
    ReadRegEntry64 = Outparams.uValue
    fRcode = Outparams.ReturnValue
    Case Else
    Rcode = 1234
    Exit Function
    End Select

    set objCtx = Nothing
    set objLocator = Nothing

    End Function

    Funktion um Key auszulesen, aber auf 32bit Struktur (bzw. auf 64Bit Struktur mit "korrekten" CMD)

    Option Explicit
    Const hklm = &H80000002
    Const strComputer = "."
    Const regPath = "SOFTWARE\Clients"
    Dim arrayRegKeys, value, objRegSet
    objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
    objReg.EnumKey hklm, regPath, arrayRegKeys
    For Each value In arrayRegKeys
    WScript.Echo value
    Next


    Vielen herzlichen Dank für die Hilfe

    Schönes Wochenende!
    ynick

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

    Da das für mich nach VBScript aussieht => Topic verschoben.

    Bitte benutze BBCodes für deinen Code, so ist er sehr schwer lesbar, siehe
    [Forum] Welche BBCodes (Tags) gibt es hier im Forum zum Einfärben von Quellcodes (Syntax-Highlighting)?

    Zum Thema: Hilft dir evtl. dieses Posting weiter? Windows-Produkt-ID auslesen geht nicht unter Windows 7 (64bit)
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum