vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: System/Windows · Sonstiges   |   VB-Versionen: VB602.07.01
Deinstallierbare Software ermitteln

Dieser Tipp zeigt, wie man die Anwendungen ermitteln kann, für die ein Deinstaller existiert.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  20.670 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Um in Ihrer Anwendung zu ermitteln, welche Software auf dem System alles installiert ist, kann man die Windows-Registry auslesen - und zwar den Bereich, in dem die Aufrufe für die einzelnen Deinstallationsprogramme gespeichert sind.

Die Einträge der deinstallierbaren Software sind hierbei im Abschnitt HKEY_LOCAL_MACHINE\Software\MicrosoftWindows\CurrentVersion\Uninstall gespeichert.

Also müssen Sie diesen Abschnitt "auslesen", und zwar am einfachsten mit Hilfe des Tipps  Durchsuchen der Registry. Als Suchtext geben Sie dann das Schlüsselwort UninstallString an. Alle gefundenen Einträge speichern Sie in einem ListView-Control, für welches Sie zwei sichtbare Spalten erstellen: Anwendung und CommandLine. Letztere zeigt den Aufrufstring für das Deinstalltionsprogramm...

' Liste der deinstallierbaren Software
Private Sub ListeRefresh()
  Dim SO As SearchOptions
  Dim Gefunden() As String
  Dim I As Integer
  Dim Daten() As String
  Dim DisplayName As String
  Dim RegKey As String
  Dim Folder As String
  Dim itemX As ListItem
 
  RegKey = "Software\Microsoft\Windows\" & _
    "CurrentVersion\Uninstall"
 
  With ListView1
    .ListItems.Clear
 
    ' vb@rchiv-Tipp
    ' Durchsuchen der Registry wird benötigt!
 
    ' Alle Einträge im Schlüssel
    ' Software\Microsoft\Windows\CurrentVersion\Uninstall
    ' ermitteln    
    With SO
      .HowToSearch = StringExists
      .SearchMainKey = HKEY_LOCAL_MACHINE
      .SearchString = "UninstallString"
      .StartSearchPath = RegKey
      .SearchSubfolders = True
      .FindKeys = False
      .FindValueNames = True
      .FindValues = False
    End With
 
    ' Suche starten
    FindString SO, Gefunden
    On Error Resume Next
    For I = 0 To UBound(Gefunden)
      Daten = Split(Gefunden(I), vbCrLf)
 
      ' SubKey
      Folder = Mid$(Daten(0), InStrRev(Daten(0), "\") + 1)
 
      ' DisplayName ermitteln
      DisplayName = Get_ValueString(HKEY_LOCAL_MACHINE, _
        RegKey & "\" & Daten(1), "DisplayName")
      If DisplayName = "" Then DisplayName = Folder
 
      Set itemX = .ListItems.Add(, Daten(0), DisplayName)
      itemX.SubItems(1) = Daten(2)
    Next I
  End With
End Sub

In unserem Beispiel möchten wir eine Liste aller deinstallierbaren Anwendungen ermitteln, mit folgenden zwei Möglichkeiten:

  1. Aufruf des Deinstallers aus der Liste heraus, Warten bis Deinstallation beendet, dann Liste aktualisieren
  2. Löschen des Eintrags aus der Registrier-Datenbank, ohne die Anwendung zu deinstallieren (z.B. sinnvoll, wenn doppelte Einträge in der Registry gespeichert stehen)

Plazieren wir also noch zwei Commandbuttons unterhalb des ListView-Elements: cmdDeinstall und cmdDelete

Deinstaller aufrufen

' Anwendung deinstallieren
Private Sub cmdDeinstall_Click()
  Dim CmdLine As String
  Dim Index As Integer
 
  If MsgBox("Es wird jetzt das Deinstallations-" & _
    "Programm gestartet!", 65, "Deinstallieren") = vbOK Then
 
    ' Deinstallation aufrufen
    With ListView1
      CmdLine = .SelectedItem.SubItems(1)
      If AppStartAndWait(CmdLine, vbNormalFocus) Then
        ' Liste aktualisieren
        Index = .SelectedItem.Index
        ListeRefresh
 
        ' nächsten Eintrag markieren
        If Index > .ListItems.Count Then _
          Index = .ListItems.Count
 
        If Index > 0 Then
          Set .SelectedItem = .ListItems(Index)
          .SelectedItem.EnsureVisible
        End If
      Else
        ' Fehler aufgetreten
        MsgBox "Fehler beim Starten des Deinstallers", _
          16, "Deinstallieren"
      End If
    End With
  End If
End Sub

Wenn Sie sich den Code aufmerksam angeschaut haben, dann haben Sie sicherlich auch bemerkt, daß hier eine Funktion verwendet wird, die es in VB doch gar nicht gibt:  AppStartAndWait
Hierbei handelt es sich um einen früheren Tipp aus dem vb@rchiv, der genau unseren Vorstellungen entspricht: Starten einer Anwendungen und warten bis diese beendet wurde.

Eintrag aus der Registry löschen
Um einen Eintrag aus der Registrierdatenbank zu löschen, ohne die Anwendung selbst deinstallieren zu müssen, verwenden wir einfach die API-Funktion RegDeleteKey:

Private Declare Function RegDeleteKey Lib "advapi32.dll" _
  Alias "RegDeleteKeyA" ( _
  ByVal hKey As Long, _
  ByVal lpSubKey As String) As Long
' Eintrag aus Registrierdatenbank löschen
Private Sub cmdDelete_Click()
  Dim lRet As Long
  Dim SubKey As String
  Dim Index As Integer
 
  If MsgBox("Aktuellen Eintrag wirklich aus der " & _
    "Registry löschen?", 292, "Löschen") = vbYes Then
    With ListView1
      SubKey = .SelectedItem.Key
 
      lRet = RegDeleteKey(MainKey.HKEY_LOCAL_MACHINE, _
        SubKey)
 
      If lRet = 0 Then
        ' Liste aktualisieren
        Index = .SelectedItem.Index
        ListeRefresh
 
        ' nächsten Eintrag markieren
        If Index > .ListItems.Count Then _
          Index = .ListItems.Count
 
        If Index > 0 Then
          Set .SelectedItem = .ListItems(Index)
          .SelectedItem.EnsureVisible
        End If
      Else
        ' Fehler aufgetreten
        MsgBox "Fehler beim Löschen des Eintrags!", _
          16, "Löschen"
      End If
    End With
  End If
End Sub

Dieser Tipp wurde bereits 20.670 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel