Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Liste der Exe-Pfade aller installierten Programme (https://www.delphipraxis.net/172442-liste-der-exe-pfade-aller-installierten-programme.html)

PeterPanino 3. Jan 2013 23:37

Liste der Exe-Pfade aller installierten Programme
 
Hallo!

Ich hab jetzt wirklich lange gesucht, aber nichhts Passendes gefunden: Wie kann man eine Liste der EXE-Pfade aller installierten Programme erhalten, sowohl 32bit als auch 64bit, XP bis W7? Also nicht die Liste der Displaynamen oder die Liste der Uninstall-Programme, sondern z.B.:

Zitat:

C:\Program Files (x86)\XYProgramm\XYProgramm.exe

Popov 4. Jan 2013 00:52

AW: Liste der Exe-Pfade aller installierten Programme
 
Delphi-Quellcode:
procedure GetFiles(Path, ExtMask: String; List: TStrings; SubFolder: Boolean);
const
  Attrib = faArchive or faReadOnly or faHidden;
var
  Tmp: String;
  k: Integer;
  Search: TSearchRec;
begin
  Path := IncludeTrailingBackslash(Path);

  with TStringList.Create do
  try
    CommaText := ExtMask;

    for k := 0 to Count - 1 do
    begin
      Tmp := Strings[k]; //Entfernt führenden Punkt vor der Ext
      while Copy(Tmp, 1, 1) = '.' do System.Delete(Tmp, 1, 1);
      Strings[k] := Tmp;

      if FindFirst(Path + '*.' + Strings[k], Attrib, Search) = 0 then
      repeat
        if List.IndexOf(Path + Search.Name) < 0 then //Doppelte Filtern
          List.Add(Path + Search.Name);
      until FindNext(Search) <> 0;
    end;

    FindClose(Search);
  finally Free end;

  //----------------------------------------------------------------------------
  //Application.ProcessMessages;

  if SubFolder then
  begin
    if FindFirst(Path + '*.*', faDirectory, Search) = 0 then
    begin
      repeat
        if ((Search.Attr and faDirectory) = faDirectory) and
          (Search.Name[1] <> '.') then
          GetFiles(Path + Search.Name, ExtMask, List, SubFolder);
      until FindNext(Search) <> 0;

      FindClose(Search);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  GetFiles('c:\', 'exe', ListBox1.Items, True);
end;
Ansonsten die Frage genauer stellen.

PeterPanino 4. Jan 2013 02:42

AW: Liste der Exe-Pfade aller installierten Programme
 
Danke, aber das ist nicht das, was ich suchte. Eine Dateisuche findet auch Programme, die nicht installiert wurden.

daywalker9 4. Jan 2013 07:00

AW: Liste der Exe-Pfade aller installierten Programme
 
Ist das hier was du suchst?

Popov 4. Jan 2013 07:07

AW: Liste der Exe-Pfade aller installierten Programme
 
Was ist mit der Registry?

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uni nstall

DeddyH 4. Jan 2013 07:17

AW: Liste der Exe-Pfade aller installierten Programme
 
http://theroadtodelphi.wordpress.com...uter-software/

Sir Rufo 4. Jan 2013 07:18

AW: Liste der Exe-Pfade aller installierten Programme
 
Zitat:

Zitat von PeterPanino (Beitrag 1197571)
Danke, aber das ist nicht das, was ich suchte. Eine Dateisuche findet auch Programme, die nicht installiert wurden.

Dann definiere doch bitte, welche Installer du in deiner Suche berücksichtigen willst.
Dabei wirst du deiner Lösung von selber näher kommen.

BTW: Das meinte Popov mit "Ansonsten die Frage genauer stellen" ;)

PeterPanino 4. Jan 2013 10:17

AW: Liste der Exe-Pfade aller installierten Programme
 
Zitat:

Zitat von daywalker9 (Beitrag 1197572)
Ist das hier was du suchst?


Nein. Abgesehen davon, dass dieser Code voller Fehler ist, liefert er nur die Uninstall-Displaynamen, was ich ja in meiner obigen Definition ausgeschlossen habe. Hier ist der soweit entwanzte Code, der das nicht brauchbare Ergebnis liefert:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
const
  REGKEYAPPS = '\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\';
var
  reg: TRegistry;
  List1: TStringList;
  List2: TStringList;
  j, n: Integer;
begin
  reg := TRegistry.Create;
  List1 := TStringList.Create;
  List2 := TStringList.Create;

  { Load all the subkeys }
  with reg do
  begin
    RootKey := HKEY_LOCAL_MACHINE;
    Access := KEY_READ; // WICHTIG WEGEN UAC !
    OpenKey(REGKEYAPPS, false);
    GetKeyNames(List1);
  end;
  { Load all the Value Names }
  for j := 0 to List1.Count - 1 do
  begin
    reg.OpenKey(REGKEYAPPS + '' + List1.Strings[j], false);
    reg.GetValueNames(List2);

    { We will show only if there is 'DisplayName' }
    n := List2.IndexOf('DisplayName');
    if (n <> -1) and (List2.IndexOf('UninstallString') <> -1) then
    begin
      memoPrograms.Lines.Add((reg.ReadString(List2.Strings[n])));
    end;
  end;
  List1.Free;
  List2.Free;
  reg.CloseKey;
  reg.Destroy;
end;

PeterPanino 4. Jan 2013 10:25

AW: Liste der Exe-Pfade aller installierten Programme
 
Zitat:

Zitat von Popov (Beitrag 1197574)
Was ist mit der Registry?

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uni nstall


In diesem Registry-Zweig sind nur die Uninstall-Schlüssel, die nicht die Exe-Pfade der Programme enthalten. Außer: Einige wenige Unterzweige von 'Uninstall' enthalten den Schlüssel 'DisplayIcon' mit dem Exe-Pfad; dies sind jedoch nur wenige Programme insgesamt. Und die Uninstall-Werte habe ich ja durch meine obige Definition ausgeschlossen.

PeterPanino 4. Jan 2013 10:27

AW: Liste der Exe-Pfade aller installierten Programme
 
Zitat:

Zitat von Sir Rufo (Beitrag 1197576)
Dann definiere doch bitte, welche Installer du in deiner Suche berücksichtigen willst.
Dabei wirst du deiner Lösung von selber näher kommen.

BTW: Das meinte Popov mit "Ansonsten die Frage genauer stellen" ;)


Siehe Beiträge 8 und 9.

Edit: Lies bitte nochmal meine Frage.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:27 Uhr.
Seite 1 von 5  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz