Domino 9 und frühere Versionen > ND6: Entwicklung
Installierte Software auslesen - local oder remote
eknori:
@Sascha: Danke für den Code. Ähnliche Routinen habe ich schon. Problem dabei ist aber, daß immer nur der lokale Rechner ausgelesen werden kann.
Ich suche aber nach einer Möglichkeit, remote einen Rechner im Netzwerk auszulesen. Und ich habe eine Möglichkeit gefunden ... WMI !
Mit den Methoden der WMI Klassen kann man praktisch alles an einem Rechner auslesen :D
Genau das, was ich für die Erweiterung von !!HELP!! brauche.
Ich habe dann heute ein wenig mit den Klassen rumgespielt und folgendes Ergebnis für die Problemstellung gefunden.
Function InstalledSoftware ( strComputer As String ) As Variant
On Error Goto EXITPOINT
Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
Dim strKey As String
Dim intRet As Integer
Dim arrSubkeys As Variant
Dim ApplList As New ArraySets
Call ApplList.Init
strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
If strComputer = "" Or Ucase(strComputer) = "LOCALHOST" Then
strComputer = "."
End If
Set objReg = GetObject("winmgmts://" & strComputer & "/root/default:StdRegProv")
objReg.EnumKey HKLM, strKey, arrSubkeys
Forall S In arrSubkeys
intRet = objReg.GetStringValue(HKLM, strKey & S, "DisplayName", strValue)
If intRet <> 0 Then
objReg.GetStringValue HKLM, strKey & S ,"QuietDisplayName", strValue
End If
ApplList.AddElement ( strValue)
End Forall
InstalledSoftware = ApplList.Value
Exit Function
EXITPOINT:
Resume Next
End Function
Die Funktion benötigt noch eine Klasse:
'==========================================================================================
' C L A S S "ArraySets"
'==========================================================================================
Class ArraySets
Public Value() As String
Public TotalElements As Integer
Sub Init
TotalElements = 0
Redim Value(1 To 1) As String
End Sub
Sub AddElement(NewValue As String)
TotalElements = TotalElements + 1
Redim Preserve Value(1 To TotalElements) As String
Value(TotalElements) = NewValue
End Sub
Function Search(SearchFor As String) As Integer
Dim CurrentLabelEntry As Integer
CurrentLabelEntry = 0
Forall c In Value
If Ucase(c) = Ucase(SearchFor) Then
CurrentLabelEntry = CurrentLabelEntry + 1
End If
End Forall
Search = CurrentLabelEntry
End Function
End Class
Aufgerufen wird die Funktion wie folgt:
Sub Click(Source As Button)
Dim retval As Variant
retval = InstalledSoftware ("")
End Sub
retVal enthält dann ein Array der installierten SOftware. So wie die Funktion jetzt aufgerufen wird, liest er die lokal installierte Software aus. Man kann der Funktion aber auch einen Rechnernamen oder eine IP übergeben.
Perfektionisten werden das obligatorische OPTION EXPLICIT vermissen. Wenn ich die Option setze und alle Variablen dimme, schmiert mir der Client regelmässig ab.
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln