Delphi-PRAXiS
Seite 1 von 2  1 2      

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.

Sir Rufo 4. Jan 2013 10:32

AW: Liste der Exe-Pfade aller installierten Programme
 
@PeterPanino

Es gibt unterschiedliche Installer, die auf unterschiedliche Art und Weise sich merken (oder eben auch nicht) welche Programme (exe Files) wohin kopiert wurden.

Ein Installer muss sich nicht zwangsläufig merken, was er kopiert hat. Es gibt Installer, die das machen, aber nicht jeder.

Somit ist es unmöglich so eine Liste zu erstellen, wenn man lapidar "alle installierten exe-Dateien" fordert.

Bitte konkretisiere deine Frage dahingehend.

Zitat:

Zitat von PeterPanino (Beitrag 1197606)
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.

Was du nicht willst ist mir klar, auch was du eigentlich haben möchtest, allerdings bezweifele ich, das es eine universelle Möglichkeit für jeden Installer gibt.

Ich schreibe dir gerne einen Installer, wo das nicht geht.

p80286 4. Jan 2013 10:40

AW: Liste der Exe-Pfade aller installierten Programme
 
Ich finde auf meinem Rechner allerdings auch die "InstallLocation", das kann natürlich auch eine Ausnahme sein.

Gruß
K-H

DeddyH 4. Jan 2013 10:52

AW: Liste der Exe-Pfade aller installierten Programme
 
IIRC enthält der aber nur das Verzeichnis, oder?

PeterPanino 4. Jan 2013 10:55

AW: Liste der Exe-Pfade aller installierten Programme
 
Wie wäre es, wenn man das Startmenü durchsucht und von dort aus den Shortcut-Targets die Liste der Exe-Dateien holt?

DeddyH 4. Jan 2013 11:01

AW: Liste der Exe-Pfade aller installierten Programme
 
Wessen Startmenü, es gibt ja eins je Benutzer? Und es gibt auch Installationen, die die Erstellung einer Startmenü-Verknüpfung optional anbieten.

Popov 4. Jan 2013 11:27

AW: Liste der Exe-Pfade aller installierten Programme
 
@PeterPanino

Eine Liste die du suchst wirst du als solches wahrscheinlich sowieso nicht finden. Entweder du gehst Kompromisse ein oder bastelst dir aus verschiedenen Listen eine Liste, die auch nur eine grobe Liste sein wird.

Die Liste sich aus Startmenü holen ist zwar eine gute Idee, aber auch nicht 100%. Dann man hat die Möglichkeit global, wie auch lokal für ein Konto zu installieren. Und dann gibt es Installer die kriegen es mit den Berechtigungen nicht richtig hin. Unter Admin kriegt man die Programme gesehen und gestartet, unter eingeschränkten User gerade mal nur die Namen gelesen. Der Rest ist weg, da man nicht die Rechte hat.

PeterPanino 4. Jan 2013 11:29

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

Zitat von DeddyH (Beitrag 1197612)
Wessen Startmenü, es gibt ja eins je Benutzer? Und es gibt auch Installationen, die die Erstellung einer Startmenü-Verknüpfung optional anbieten.


Das Startmenü des aktuell angemeldeten Benutzers und das Startmenü für alle Benutzer.

Morphie 4. Jan 2013 11:35

AW: Liste der Exe-Pfade aller installierten Programme
 
Darf man fragen, wofür du das brauchst?
In meinem Startmenü wirst du übrigens nicht viel finden ;-)

PeterPanino 4. Jan 2013 12:32

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

Zitat von Morphie (Beitrag 1197615)
Darf man fragen, wofür du das brauchst?
In meinem Startmenü wirst du übrigens nicht viel finden ;-)


Ich möchte abfragen, ob Programme aus einer vorgegebenen eigenen Liste (welche durch keine Regel definiert ist) installiert sind, UND ich brauche deren Exe-Pfade.

p80286 4. Jan 2013 13:34

AW: Liste der Exe-Pfade aller installierten Programme
 
Wie wäre es den umgekehrten Weg zu gehen, findest Du die vorhandenen Programm-Pfade im Uninstall Verzeichnis?
Dann hättest Du zumindestens die Möglichkeit Deine Informationen zu klassifizieren.

Gruß
K-H

dunningkruger 4. Jan 2013 13:39

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

Zitat von PeterPanino (Beitrag 1197618)
Zitat:

Zitat von Morphie (Beitrag 1197615)
Darf man fragen, wofür du das brauchst?
In meinem Startmenü wirst du übrigens nicht viel finden ;-)


Ich möchte abfragen, ob Programme aus einer vorgegebenen eigenen Liste (welche durch keine Regel definiert ist) installiert sind, UND ich brauche deren Exe-Pfade.

Das mit "(welche durch keine Regel definiert ist)" wird interessant...

In #2 hat Popov schon einen brauchbaren Ansatz geliefert, der aber für alle Laufwerke mit gewissewn Ordnern...

Aber es ist ja "keine Regel definiert" :evil::twisted:

Denn sie wissen nicht, was sie tun wollen, oder?

Popov 4. Jan 2013 14:27

AW: Liste der Exe-Pfade aller installierten Programme
 
Vielleicht ist das auch interessant:

http://www.delphipraxis.net/111350-v...-auslesen.html

Das, mit alle Verknüpfungen in den Startmenüs auslesen, ergibt die tatsächlichen Dateien der Startmenüs. Dann noch Exe filtern.

Damit findest du die Startmenüs

http://www.delphipraxis.net/421-pfad...ermitteln.html

Dalai 4. Jan 2013 14:42

AW: Liste der Exe-Pfade aller installierten Programme
 
Die Methode via Startmenü halte ich für genauso fehlerträchtig wie die anderen, weil im Startmenü pro Programm eine ganze Reihe von EXE-Dateien verknüpft sein können: das Programm selbst, ein Uninstaller, ein/mehrere Hilfsprogramm(e), das Programm selbst mit anderen Aufrufparametern (OK, die dadurch entstehenden Doppelungen kann man filtern) usw.

MfG Dalai

Sir Rufo 4. Jan 2013 14:45

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

Zitat von PeterPanino (Beitrag 1197618)
Zitat:

Zitat von Morphie (Beitrag 1197615)
Darf man fragen, wofür du das brauchst?
In meinem Startmenü wirst du übrigens nicht viel finden ;-)


Ich möchte abfragen, ob Programme aus einer vorgegebenen eigenen Liste (welche durch keine Regel definiert ist) installiert sind, UND ich brauche deren Exe-Pfade.

Das hört sich nach einem automatischen Updater an und du willst die Versionsinfo aus den exe-Dateien lesen?

dunningkruger 4. Jan 2013 14:56

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

Zitat von Sir Rufo (Beitrag 1197634)
Zitat:

Zitat von PeterPanino (Beitrag 1197618)
Zitat:

Zitat von Morphie (Beitrag 1197615)
Darf man fragen, wofür du das brauchst?
In meinem Startmenü wirst du übrigens nicht viel finden ;-)


Ich möchte abfragen, ob Programme aus einer vorgegebenen eigenen Liste (welche durch keine Regel definiert ist) installiert sind, UND ich brauche deren Exe-Pfade.

Das hört sich nach einem automatischen Updater an und du willst die Versionsinfo aus den exe-Dateien lesen?

Das aktuelle "Versionsinfo-Hineinkompilieren" in die Echse vergisst man zu oft :oops:

Was meint denn der TE inzwischen zu den abgelieferten Antworten?

PeterPanino 4. Jan 2013 16:24

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

Zitat von p80286 (Beitrag 1197621)
Wie wäre es den umgekehrten Weg zu gehen, findest Du die vorhandenen Programm-Pfade im Uninstall Verzeichnis?
Dann hättest Du zumindestens die Möglichkeit Deine Informationen zu klassifizieren.

Gruß
K-H


Was meinst du mit "Uninstall Verzeichnis"?

Was meinst du mit "klassifizieren"?

PeterPanino 4. Jan 2013 16:25

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

Zitat von Sir Rufo (Beitrag 1197634)
Das hört sich nach einem automatischen Updater an und du willst die Versionsinfo aus den exe-Dateien lesen?


Nein.

PeterPanino 4. Jan 2013 16:31

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

Zitat von Dalai (Beitrag 1197632)
Die Methode via Startmenü halte ich für genauso fehlerträchtig wie die anderen, weil im Startmenü pro Programm eine ganze Reihe von EXE-Dateien verknüpft sein können: das Programm selbst, ein Uninstaller, ein/mehrere Hilfsprogramm(e), das Programm selbst mit anderen Aufrufparametern (OK, die dadurch entstehenden Doppelungen kann man filtern) usw.

MfG Dalai


Ich möchte abfragen, ob Programme aus einer vorgegebenen eigenen Liste (welche durch keine Regel definiert ist) installiert sind, UND ich brauche deren Exe-Pfade. Die Art der Filterung stellt sicher, dass nur die Exes der Hauptprogramme gefunden werden.

PeterPanino 4. Jan 2013 16:35

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

Zitat von Popov (Beitrag 1197630)
Vielleicht ist das auch interessant:

http://www.delphipraxis.net/111350-v...-auslesen.html

Das, mit alle Verknüpfungen in den Startmenüs auslesen, ergibt die tatsächlichen Dateien der Startmenüs. Dann noch Exe filtern.

Damit findest du die Startmenüs

http://www.delphipraxis.net/421-pfad...ermitteln.html


Vielen Dank für die Links! Die JCL hat ebenso Funktionen dafür.

PeterPanino 4. Jan 2013 16:36

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

Zitat von dunningkruger (Beitrag 1197635)
Was meint denn der TE inzwischen zu den abgelieferten Antworten?


S.u.u.o.

PeterPanino 4. Jan 2013 16:41

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

Zitat von dunningkruger (Beitrag 1197623)
Das mit "(welche durch keine Regel definiert ist)" wird interessant...

Eine Menge von Objekten, die durch keine Regel definiert ist, könnte z.B. sein: Auto, Apfel, Intelligenz, Geduld, Universum, ...

Zitat:

Zitat von dunningkruger (Beitrag 1197623)
In #2 hat Popov schon einen brauchbaren Ansatz geliefert, der aber für alle Laufwerke mit gewissewn Ordnern...

Dauert zu lange.

DeddyH 4. Jan 2013 16:44

AW: Liste der Exe-Pfade aller installierten Programme
 
6 aufeinanderfolgene Beiträge innerhalb einer halben Stunde, wenn das kein Pushen ist... Außerdem kann ich mit der Beschreibung wenig bis gar nichts anfangen, wie soll man da weiterhelfen?

PeterPanino 4. Jan 2013 16:53

AW: Liste der Exe-Pfade aller installierten Programme
 
Bitte keine "Hilfe" mehr. Ich habe eine Lösung und poste sie später.

Dalai 4. Jan 2013 17:58

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

Zitat von PeterPanino (Beitrag 1197645)
Ich möchte abfragen, ob Programme aus einer vorgegebenen eigenen Liste (welche durch keine Regel definiert ist) installiert sind, UND ich brauche deren Exe-Pfade.

Das schriebst du bereits, aber schlauer bin ich weiterhin nicht.

Zitat:

Die Art der Filterung stellt sicher, dass nur die Exes der Hauptprogramme gefunden werden.
Na da bin ich ja mal gespannt, wie und wonach du filtern willst...

MfG Dalai

PeterPanino 4. Jan 2013 18:25

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

Zitat von Dalai (Beitrag 1197656)
Das schriebst du bereits, aber schlauer bin ich weiterhin nicht.

Kann ich leider nichts dafür.

Zitat:

Zitat von Dalai (Beitrag 1197656)
Na da bin ich ja mal gespannt, wie und wonach du filtern willst...

Achte auf deinen Blutdruck! ;-)

Aber vielen Dank vorerst mal an alle, die mir helfen wollten! :-D

PeterPanino 4. Jan 2013 23:55

AW: Liste der Exe-Pfade aller installierten Programme
 
Hier ist der Code:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, System.StrUtils,
  //CodeSiteLogging,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  JclSysInfo, JclFileUtils, JclShell;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure DoCheckIfSomeProgramsAreInstalled(const slPrograms, slResults: TStringList);
var
  i, j: Integer;
  sCommonStartmenuFolder, sStartmenuFolder: string;
  slShortcuts: TStringList;
  ThisShellLinkRecord: JclShell.TShellLink;
  ThisTargetExePath: string;
begin
  sCommonStartmenuFolder := JclFileUtils.PathAddSeparator(JclSysInfo.GetCommonStartmenuFolder);
  sStartmenuFolder      := JclFileUtils.PathAddSeparator(JclSysInfo.GetStartmenuFolder);

  slShortcuts := TStringList.Create;
  try
    JclFileUtils.AdvBuildFileList(sCommonStartmenuFolder + '*.lnk', faAnyFile, slShortcuts, amAny, [flFullNames, flRecursive]);
    JclFileUtils.AdvBuildFileList(sStartmenuFolder      + '*.lnk', faAnyFile, slShortcuts, amAny, [flFullNames, flRecursive]);

    for i := 0 to slShortcuts.Count - 1 do
    begin
      for j := 0 to slPrograms.Count - 1 do
      begin
        if Pos(slPrograms[j], AnsiLowerCaseFileName(ExtractFileName(slShortcuts[i]))) > 0 then
        begin
          JclShell.ShellLinkResolve(slShortcuts[i], ThisShellLinkRecord);
          ThisTargetExePath := JclFileUtils.PathGetLongName(ThisShellLinkRecord.Target);
          if CompareText('.exe', ExtractFileExt(ThisTargetExePath)) = 0 then
          begin
            if Pos('unins', AnsiLowerCaseFileName(ExtractFileName(ThisTargetExePath))) = 0 then
              slResults.Add(ThisTargetExePath);
          end;
        end;
      end;
    end;
  finally
    slShortcuts.Free;
  end;
end;

procedure CheckIfTheseProgramsAreInstalled(const rgPrograms: array of string);
var
  i: Integer;
  slPrograms: TStringList;
  ProgramNames: string;
  slResults: TStringList;
begin
  slPrograms := TStringList.Create;
  slResults := TStringList.Create;
  try
    slResults.Sorted := True;
    slResults.Duplicates := dupIgnore;

    // ################################################
    if Length(rgPrograms) = 0 then
    begin
      // Load lowercase! program names:
      ProgramNames := PathAddSeparator(ExtractFilePath(Application.ExeName)) + 'ProgramNames.txt';
      slPrograms.LoadFromFile(ProgramNames);
    end
    else
    begin
      for i := Low(rgPrograms) to High(rgPrograms) do
        slPrograms.Add(rgPrograms[i]);
    end;
    // ################################################

    Screen.Cursor := crHourGlass;
    try
      DoCheckIfSomeProgramsAreInstalled(slPrograms, slResults);
    finally
      Screen.Cursor := crDefault;
    end;

    // Ergebnis ausgeben:
    //CodeSite.Send('slResults', slResults);
    slResults.SaveToFile(PathAddSeparator(ExtractFilePath(Application.ExeName)) + 'Results.txt');
  finally
    slPrograms.Free;
    slResults.Free;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Aufruf 1 (Laden der gesuchten Programme aus Textdatei):
  CheckIfTheseProgramsAreInstalled([]);

  // ODER Aufruf 2 (gesuchte Programme übergeben):
  CheckIfTheseProgramsAreInstalled([
    'irfanview',
    'snagit 11 editor',
    'gimp',
    'microsoft clip organizer',
    'paint.net',
    'photoscape',
    'portrait professional',
    'serif photoplus',
    'tineye',
    'xnview',
    'image analyzer'
                                   ]);
end;

end.
Ich prüfe damit, welche aus einer bestimmten Liste von Grafikprogrammen installiert sind. Die Suchstrings müssen lowercase sein und sind Teilstrings der Startmenüeinträge.

Bitte schickt mir auch die Suchstrings der Grafikprogramme, die bei euch installiert sind und die nicht in der Liste aufgezählt sind, damit ich bei möglichst vielen Endbenutzern prüfen kann, welche Grafikprogramme installiert sind. Danke!

Popov 5. Jan 2013 01:40

AW: Liste der Exe-Pfade aller installierten Programme
 
Kein Fehler, aber eine Vergesslichkeit, die auch ich immer wieder gerne mache

Delphi-Quellcode:
      for i := Low(rgPrograms) to High(rgPrograms) do
...
rgPrograms ist ein dynamischer Array, somit ist Low() eigentlich immer 0.

Zu der Routine. Ein anderer Ansatz den ich mal versuchte, war die installierten Programme zu einem Gebiet (also z. B. Grafik, Video, Sound, ...) über die Registry zu ermitteln. Um bei Grafikprogrammen zu bleiben, habe ich alle Endungen zu einem Gebiet (bmp, jpg, jpeg, gif, png, ...) aufgelistet und alle damit verbundenen Programme ermittelt. Zuerst über die Verknüpfung zu der Dateiendung. Da aber nicht unbedingt jedes Programm eine Verknüpfung zu einer Dateiendung besitzt, habe ich das mit der Liste der Programme komplettiert, die schon mal eine Datei mit einer der Dateiendungen geöffnet haben (Windows merkt sich solche Programme und vermerkt sie in der Registry). Die Liste war eigentlich sehr gut und hat sogar Programme gelistet an die man selbst nicht dachte.

Delphi-Laie 5. Jan 2013 12:20

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

Zitat von PeterPanino (Beitrag 1197542)
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

Nur angezeigt oder auch passenden Quelltext dazu?

Nur anzeigen tut es z.B. das Program MyUnInstaller von Nirsoft. Leider liegen keine Quelltexte bei, die wären allerdings ohnehin in C(++).

PeterPanino 5. Jan 2013 12:47

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

Zitat von Delphi-Laie (Beitrag 1197730)
Nur anzeigen tut es z.B. das Program MyUnInstaller von Nirsoft. Leider liegen keine Quelltexte bei, die wären allerdings ohnehin in C(++).


Dem Laufzeitverhalten des Programms nach durchsucht es die Programmverzeichnisse und braucht dafür mehrer Minuten. Das dauert für meinen Zweck viel zu lange. Mein obiger Code erfüllt seinen Zweck in einer Zehntelsekunde! Außerdem macht das Nirsoft-Programm ganz was anderes und listet nicht die Pfade der ausführbaren Programm-Exe-Dateien auf, sondern nur die Installationsinformationen. Mein Code prüft, ob eine Reihe von Programmen installiert sind und liefert deren Exe-Pfade.

PeterPanino 5. Jan 2013 13:05

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

Zitat von Popov (Beitrag 1197717)
rgPrograms ist ein dynamischer Array, somit ist Low() eigentlich immer 0.


Die richtige Bezeichnung lautet in diesem Fall "Open Array" und nicht "Dynamic Array". Einem dynamischen Array muss immer erst explizit mit SetLength Speicher zugewiesen werden. Im Falle eines offenen Arrays wird dies implizit durch den "Open Array Constructor" beim Aufruf erledigt.


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

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