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:
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 Eintrag aus der Registry löschen 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
Anzeige
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. |
sevZIP40 Pro DLL Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
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. |