Typenunverträglichkeit im Vorfeld abfangen

02/11/2007 - 20:47 von pacobay | Report spam
Hallo WSH-Community,
im Rahmen einer Funktion um Regwerte zu schreiben werden u.A. eine Variable
TheValue und eine Variable ValueTyp übergeben

ValueTyp kann nur folgende Auspràgungen haben:
ValueTyp="REG_SZ"
'ValueTyp="REG_DWORD"
'ValueTyp="REG_BINARY"
'ValueTyp="REG_EXPAND_SZ"

TheValue kann theoretisch alles sein
Aber natürlich müssen die beiden zusammen sinnvoll sein
denn 'ValueTyp="REG_DWORD" und TheValue="AAA" geht ja nicht
scriptabbruch mit Typen unvertràglich was auch logisch und korrekt ist

Nun möchte ich solche Fehler aber im Vorfeld abfangen
mit einer art check ob TheValue und ValueTyp vertràglich sind

ein Nachtràgliche Abfangen via on error resume next etc ist mir zu
unspezifisch

Hat einer eine Idee wie das machbar wàre?

Danke

PS
Möglicherweise zur besseren Verstàndlichket einmal das scripting beigefügt

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Der folgende Code kann einfach als vbs datei abgespeichert werden
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'Anfang regedit.vbs
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'Deklaration
DIM RegKey,ValueName,TheValue,ValueTyp
'~~~~~
Public LastError 'Der letzte abgefangene Fehler
'vgl.: hierzu die Verwendung in der Function CheckRegKey

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Function writeTheValue (RegKey,ValueName,TheValue,ValueTyp)
'returns done if erfolgreich geschrieben

Dim Argu1,Argu2,Argu3

'Argu1 'Argument1'
Argu1="" & RegKey & ValueName & "" '1. Argument

'~~~~~~
'Prüfung ob value Typ einer der 4 grundsàtzlich Möglichen ist
if ValueTyp ="REG_SZ" Xor ValueTyp ="REG_DWORD" Xor ValueTyp ="REG_BINARY"
Xor ValueTyp ="REG_EXPAND_SZ" then
' einfach weiter'
else
wscript.echo " kein gültiger ValueTyp!"
Exit Function 'Im Fehlerfall wird die Function beendet
end if
'~~~~~~
'~~~~~~

' HIER hàtte ich gerne eine entsprechende Überprüfung der Vertràglichkeit

'~~~~~~
'~~~~~~

'Argu2 'Argument2 hier wir nach ValueTyp unterschieden da diese ohne
Hochkomma übergeben werden müssen
if ValueTyp="REG_SZ" or ValueTyp="REG_EXPAND_SZ" then
Argu2= "" & TheValue & ""
else
if ValueTyp="REG_DWORD" or ValueTyp="REG_BINARY" then
Argu2 = TheValue
end if
end if

'Argu3 'Argument3
Argu3 = "" & ValueTyp & ""

DIM objMReg ' objekt 4 manipulate the Registry',
Set objMReg = Wscript.CreateObject("Wscript.Shell")
objMReg.Regwrite Argu1, Argu2,Argu3

WScript.Sleep 2000 'gibt dem Vorgang etwas Zeit
'Wscript.echo "eine Anzeige um den Fehlerfall testen zu können"
'Wàhrend diesem Echo kann manuell der soeben erstellte Key+Value gelöscht
werden um die Fehlerroutine zu prüfen'

if CheckRegKey (RegKey,ValueName)="ok" then
writeKey = objMReg.RegRead (Argu1) 'weist den Rückgabewert der Funktion zu'
writeKey="done"
else
'Meldung
Wscript.echo LastError
end if
End Function 'writeKey

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Function CheckRegKey (RegKey,ValueName)
'Kann der RegKey+ValueName gefunden werden'
'return: "Fehler" wenn nicht sonst "ok"'
On Error Resume Next
'Argu1 'Argument1'
Dim Argu1
Argu1="" & RegKey & ValueName & "" '1. Argument

DIM objMReg ' objekt 4 manipulate the Registry',
Set objMReg = Wscript.CreateObject("Wscript.Shell")
objMReg.RegRead(Argu1)
if Err.Number<>0 then
LastError="Error # " & Err.Number & " " & Err.Description
CheckRegKey="Fehler"
else
CheckRegKey="ok" '1Argu1 & " ist existent"
end if
Err.Clear ' Leeren des Fehlerobjektes.

On Error GoTo 0 ' to disable error handling

End Function 'CheckRegKey
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SUB Main

RegKey="HKEY_LOCAL_MACHINE\SOFTWARE\4sicab\"
ValueName="findRoot"
Dim testVar
testvar="just42show"
TheValue=testvar
ValueTyp="REG_BINARY"

writeTheValue RegKey,ValueName,TheValue,ValueTyp
'wscript.echo readKey(RegKey,ValueName)
'deleteKey RegKey,ValueName
'wscript.echo readKey(RegKey,ValueName)
'wscript.echo CheckRegKey (RegKey,ValueName)
wscript.echo "done"
End SUB 'Main'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
main 'Aufruf des SUBs zum testen

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'EOF

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'ENDE regedit.vbs
 

Lesen sie die antworten

#1 Nils Kaczenski [MVP]
03/11/2007 - 10:59 | Warnen spam
Moin pacobay,

bitte halte dich an die Netikette und poste unter deinem vollstàndigen
Realnamen. Danke.

[Netikette für technische Newsgroups - faq-o-matic.net]
http://faq-o-matic.net/blogs/faq-o-...roups.aspx

Nun möchte ich solche Fehler aber im Vorfeld abfangen
mit einer art check ob TheValue und ValueTyp vertràglich sind



das ist aufgrund der Struktur von VBScript aufwàndig, aber natürlich
machbar. Ich würde an der Stelle z.B. eine Select-Case-Abfrage mit
VarType() oder TypeName() versuchen und ggf. mit den
Konvertierungsfunktionen (CString, CByte usw.) explizit umwandeln.


Schöne Grüße, Nils

Nils Kaczenski - MVP Windows Server
www.faq-o-matic.net
Antworten bitte nur in die Newsgroup!
PM: Vorname at Nachname .de
https://mvp.support.microsoft.com/p....Kaczenski

Ähnliche fragen