Domino 9 und frühere Versionen > ND6: Entwicklung

Installierte Software auslesen - local oder remote

<< < (2/2)

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