![]() |
AW: Installed Software function
Man bist Du schnell... wollte mein Fehler schnell verstecken, aber Antwort ist schon da.
Hatte for im Kopf (das nur einmal die Bedingungen prüft), ist ja aber eine while Schleife. |
AW: Installed Software function
Jepp, das sollte also eigentlich sauber durchlaufen.
@Deep-Sea: ich würde noch prüfen, ob die übergebene Liste auch Assigned ist und dann mit BeginUpdate/EndUpdate leeren und neu befüllen. Hängt da eine grafische Ausgabe dran (ListBox.Items oder sowas übergeben), dann beschleunigt das ungemein. |
AW: Installed Software function
War ja klar, dass ich was vergessen musste :roll:
Delphi-Quellcode:
Besser so?
procedure GetUninstallList(AList: TStrings);
const UNINSTALL_PATH = 'Software\Microsoft\Windows\CurrentVersion\Uninstall\'; DISPLAY_NAME = 'DisplayName'; var LIndex: Integer; begin If Assigned(AList) then begin AList.BeginUpdate; try AList.Clear; With TRegistry.Create do try RootKey := HKEY_LOCAL_MACHINE; If KeyExists(UNINSTALL_PATH) and OpenKeyReadOnly(UNINSTALL_PATH) then begin GetKeyNames(AList); CloseKey; end; LIndex := 0; While LIndex < AList.Count do begin If not (OpenKeyReadOnly(UNINSTALL_PATH + AList[LIndex]) and ValueExists(DISPLAY_NAME)) then AList.Delete(LIndex) else begin AList[LIndex] := ReadString(DISPLAY_NAME); Inc(LIndex); end; CloseKey; end; finally Free; end; finally AList.EndUpdate; end; end; end; |
AW: Installed Software function
Jepp, sieht brauchbar aus :mrgreen:
|
AW: Installed Software function
Nun jetzt da die Funktion technisch steht, sollte wir uns über den Namen der Funktion "GetUninstallList" unterhalten.
Denn Sie liefert keine UninstallList, sondern eine Liste von Installierten Programm und Updates, welche einen DisplayNamen haben. Vor allem müsste noch diskutiert werden, was das Rückgabeergebnis der Funktion bringt. Gut eine Liste von Programmen, aber was soll damit geschehen? Werden zum Weiterverarbeiten noch anderen Werte benötigt? Wenn Ja, können diese nicht gleich mit ermittelt werden? Müssen Einträge gefiltert werden (z.B. Updates unterdrücken / nicht deinstallierbare verstecken)? Ach ja, kleine Bug ist noch drin. In 64Bit Umgebungen fehlen Einträge von 64Bit-Programmen in der Liste, da diese nicht im Wow64 Knoten abgelegt werden. Da im Dunstkreis ist auch noch ein Bug in alten Delphi Versionen, wenn auf 64Bit Knoten zugegriffen werden soll. |
AW: Installed Software function
könnte auch schon ausreichen
Delphi-Quellcode:
procedure GetUninstallList(List: TStrings);
const UninstallPath = '\Software\Microsoft\Windows\CurrentVersion\Uninstall'; DisplayName = 'DisplayName'; var i: Integer; begin List.Clear; with TRegistry.Create(KEY_READ) do try RootKey := HKEY_LOCAL_MACHINE; if KeyExists(UninstallPath) and OpenKeyReadOnly(UninstallPath) then GetKeyNames(List); for i := List.Count - 1 downto 0 do if OpenKeyReadOnly(UninstallPath + '\' + List[i]) and ValueExists(DisplayName) then List[i] := ReadString(DisplayName); else List.Delete(i); finally Free; end; end; |
AW: Installed Software function
Dann übergib mal nil als List-Parameter.
|
AW: Installed Software function
selber Schuld, wenn's knallt :twisted:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz