retrodude
Goto Top

Funktion in Hauptscript integrieren

Hallo. Ich habe zwecks Registrymutation einen Script gebastelt. Im Hauptscript wird überprüft, ob ein Flagkey existiert oder nicht. Falls dieser bereits existiert, macht er nix. Falls dieses Flag nicht existiert arbeitet er zwei separate Scripts ab, welche mit Hilfe einer Funktion gewährleisten, dass die gewünschten Keys inkl. Inhalt gelöscht werden. Anschliessend wird das Flag geschrieben. Nun zu meiner Frage. Was muss ich ändern um dies in ein und demselben Hauptscript zu tun? Meine Lösung funktioniert zwar, ist aber nicht wirklich elegant.. face-wink
Bin für Anregungen dankbar!
Grüsse

' Hauptscript.vbs

Const HKEY_CURRENT_USER = &H80000001

strComputer = "."
Set objRegistry = GetObject("winmgmts:\\" & _
strComputer & "\root\default:StdRegProv")
Set WshShell = WScript.CreateObject("WScript.Shell")

strKeyPath = "SOFTWARE\ApplikationX\LaunchMethods"
strValueName = "Flag"
strValueName1 = "Dummykey"

objRegistry.GetStringValue HKEY_CURRENT_USER,strKeyPath,strValueName,strValue

If IsNull(strValue) Then

objRegistry.SetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strValueName1

WshShell.run "DEL_KEY1.VBS"
WshShell.run "DEL_KEY2.VBS"

Else

End If


' DEL_KEY1.vbs

Const HKEY_CURRENT_USER = &H80000001

Set wmiLocator = CreateObject("WbemScripting.SWbemLocator")

Set wshNetwork = CreateObject("WScript.Network")

Set wmiNameSpace = wmiLocator.ConnectServer(wshNetwork.ComputerName, "root\default")
Set objRegistry = wmiNameSpace.Get("StdRegProv")


sPath = "SOFTWARE\ApplikationX\LaunchMethods\DB1"

lRC = DeleteRegEntry(HKEY_CURRENT_USER, sPath)

Function DeleteRegEntry(sHive, sEnumPath)
lRC = objRegistry.DeleteKey(sHive, sEnumPath)

If (lRC <> 0) Then

On Error Resume Next

lRC = objRegistry.EnumKey(HKEY_CURRENT_USER, sEnumPath, sNames)

For Each sKeyName In sNames
If Err.Number <> 0 Then Exit For
lRC = DeleteRegEntry(sHive, sEnumPath & "\" & sKeyName)
Next

On Error Goto 0

lRC = objRegistry.DeleteKey(sHive, sEnumPath)

End If

End Function


' DEL_KEY2.vbs

Const HKEY_CURRENT_USER = &H80000001

Set wmiLocator = CreateObject("WbemScripting.SWbemLocator")

Set wshNetwork = CreateObject("WScript.Network")

Set wmiNameSpace = wmiLocator.ConnectServer(wshNetwork.ComputerName, "root\default")
Set objRegistry = wmiNameSpace.Get("StdRegProv")


sPath = "SOFTWARE\ApplikationX\LaunchMethods\DB2"

lRC = DeleteRegEntry(HKEY_CURRENT_USER, sPath)

Function DeleteRegEntry(sHive, sEnumPath)
lRC = objRegistry.DeleteKey(sHive, sEnumPath)

If (lRC <> 0) Then

On Error Resume Next

lRC = objRegistry.EnumKey(HKEY_CURRENT_USER, sEnumPath, sNames)

For Each sKeyName In sNames
If Err.Number <> 0 Then Exit For
lRC = DeleteRegEntry(sHive, sEnumPath & "\" & sKeyName)
Next

On Error Goto 0

lRC = objRegistry.DeleteKey(sHive, sEnumPath)

End If

End Function

Content-ID: 144187

Url: https://administrator.de/contentid/144187

Ausgedruckt am: 22.11.2024 um 21:11 Uhr

bastla
bastla 04.06.2010 um 19:14:00 Uhr
Goto Top
Hallo RetroDude!

Sollte sich grundsätzlich etwa so machen lassen:
' Hauptscript.vbs  

Const HKEY_CURRENT_USER = &H80000001

strComputer = "."  
Set objRegistry = GetObject("winmgmts:\\" & _  
strComputer & "\root\default:StdRegProv")  
Set WshShell = WScript.CreateObject("WScript.Shell")  

strKeyPath = "SOFTWARE\ApplikationX\LaunchMethods"  
strValueName = "Flag"  
strValueName1 = "Dummykey"  

objRegistry.GetStringValue HKEY_CURRENT_USER,strKeyPath,strValueName,strValue

If IsNull(strValue) Then
    objRegistry.SetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strValueName1
    DEL_KEYS
End If

'#################  
Sub DEL_KEYS

Set wmiLocator = CreateObject("WbemScripting.SWbemLocator")  
Set wshNetwork = CreateObject("WScript.Network")  

Set wmiNameSpace = wmiLocator.ConnectServer(wshNetwork.ComputerName, "root\default")  
Set objRegistry = wmiNameSpace.Get("StdRegProv")  

sPath = "SOFTWARE\ApplikationX\LaunchMethods\DB1"  
lRC = DeleteRegEntry(HKEY_CURRENT_USER, sPath)

sPath = "SOFTWARE\ApplikationX\LaunchMethods\DB2"  
lRC = DeleteRegEntry(HKEY_CURRENT_USER, sPath)

End Sub

'#################  
Function DeleteRegEntry(sHive, sEnumPath)
lRC = objRegistry.DeleteKey(sHive, sEnumPath)

If (lRC <> 0) Then
    On Error Resume Next
    lRC = objRegistry.EnumKey(HKEY_CURRENT_USER, sEnumPath, sNames)

    For Each sKeyName In sNames
        If Err.Number <> 0 Then Exit For
        lRC = DeleteRegEntry(sHive, sEnumPath & "\" & sKeyName)  
    Next

    On Error Goto 0

    lRC = objRegistry.DeleteKey(sHive, sEnumPath)

End If

End Function
'#################  
Eigentlich wäre die Verwendung des Unterprogrammes gar nicht nötig - Du könntest die Zeilen 24 - 34 einfach als Ersatz für den Aufruf in Zeile 18 einfügen ...

Grüße
bastla

P.S.: Falls Dir die von mir verwendete Formatierung für das Script auch besser gefällt: ...
RetroDude
RetroDude 08.06.2010 um 16:59:44 Uhr
Goto Top
Hallo Bastla

Danke! Funktioniert prima.

Gruss