Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Installed Software function (https://www.delphipraxis.net/160636-installed-software-function.html)

Satty67 24. Mai 2011 11:00

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.

DeddyH 24. Mai 2011 11:04

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.

Deep-Sea 24. Mai 2011 11:13

AW: Installed Software function
 
War ja klar, dass ich was vergessen musste :roll:
Delphi-Quellcode:
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;
Besser so?

DeddyH 24. Mai 2011 11:16

AW: Installed Software function
 
Jepp, sieht brauchbar aus :mrgreen:

generic 24. Mai 2011 11:29

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.

himitsu 24. Mai 2011 11:36

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;

DeddyH 24. Mai 2011 11:39

AW: Installed Software function
 
Dann übergib mal nil als List-Parameter.

himitsu 24. Mai 2011 13:00

AW: Installed Software function
 
selber Schuld, wenn's knallt :twisted:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:48 Uhr.
Seite 2 von 2     12   

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