![]() |
Liste aller installierten Programme
Ich möchte in der Registry (HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Cur rentVersion\App Paths) allen installierte Programme
auflisten.Habe folgenden Code gefunden.Das Memofeld bleibt aber leer.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var AppInfo: String; TempStrings: TStringList; I: Integer; begin TempStrings := TStringList.Create; Memo1.Lines.Clear; AppInfo := ''; with TRegistry.Create do begin RootKey := HKEY_LOCAL_MACHINE; OpenKey('\Software\Microsoft\Windows\CurrentVersion\App Paths', True); //Open specific key... GetKeyNames(TempStrings); CloseKey; for I := 0 to TempStrings.Count - 1 do begin OpenKey('\Software\Microsoft\Windows\CurrentVersion\App Paths\' + TempStrings[I], True); AppInfo := 'File path: ' + ReadString('') + #13#10; if ValueExists('Path') then AppInfo := AppInfo + 'Path: ' + ReadString('Path') + #13#10; if ValueExists('Version') then AppInfo := AppInfo + 'Version: ' + ReadString('Version') + #13#10; AppInfo := AppInfo + '--------------------------------------'; Memo1.Lines.Add(AppInfo); CloseKey; end; Free; end; TempStrings.Free; end; |
AW: Liste aller installierten Programme
Welches Betriebssystem? Der Konstruktor der Klasse TRegistry öffnet den Schlüssel immermit allen Rechten, also auch Schreibrechten. Als einfacher Benutzer hat man aber im Hive HKLM keine Schreibrechte, weswegen das Memo wohl leer beleibt. Gäbe es eine gescheite Fehlerbehandlung, wäre das wahrscheinlich auch aufgefallen. Ich hoffe du hast den Code nicht bei uns im Forum gefunden.
|
AW: Liste aller installierten Programme
Den (Lese)Zugriff auf die Registry starten mit der Anweisung:
Code:
{..}
with TRegistry.Create(KEY_READ) do {...} |
AW: Liste aller installierten Programme
Dein Code ist ok.
Ich habe XP und D7 im Einsatz... |
AW: Liste aller installierten Programme
Und arbeitest als Admin oder normaler Benutzer?
Ab Vista mit aktiver UAC arbeitet aber auch ein Adminbenutzer standradmässig nur mit Benutzerrechten. |
AW: Liste aller installierten Programme
Win 7 // D7 // o.k.
|
AW: Liste aller installierten Programme
Oder so etwas ?
Delphi-Quellcode:
function GetWinAppInstallInfo(outStrings: TStrings): bool;
const REG_APPPATHS = '\Software\Microsoft\Windows\CurrentVersion\Uninstall'; var AppInfo: string; strLst: TStringList; i: Integer; begin Result := False; if ASSIGNED(outStrings) then begin with TRegistry.Create(KEY_READ) do try RootKey := HKEY_LOCAL_MACHINE; strLst := TStringList.Create; try if OpenKey(REG_APPPATHS, False) then begin GetKeyNames(strLst); CloseKey; for I := 0 to strLst.Count - 1 do begin outStrings.Add(format('Application: %s', [strLst[I]])); if OpenKey(REG_APPPATHS + '\' + strLst[I], False) then begin AppInfo := #9'Location:'; if ValueExists('InstallLocation') then AppInfo := AppInfo + #9#9 + ReadString('InstallLocation') + #13#10 else AppInfo := AppInfo + #9#9'(System)' + #13#10; if ValueExists('Displayname') then AppInfo := AppInfo + #9'Displayname: ' + #9 + ReadString('Displayname') + #13#10; outStrings.Add(AppInfo); CloseKey; Result := True; end; end; //for end else begin // Error read end; finally strLst.Free; end; finally Free; // Registry end; end else ShowMessage('Zonk "outStrings" !'); end; procedure TForm1.FormCreate(Sender: TObject); begin Memo1.Clear; GetWinAppInstallInfo(Memo1.Lines); end; |
AW: Liste aller installierten Programme
Den Code könnte man bezüglich der Fehlerbehandlung noch etwas optimieren. Ich würde zum Beispiel eine Exception werfen und nicht mit Rückgabewerten arbeiten.
|
AW: Liste aller installierten Programme
Danke der Tipp mit TRegistry.Create(key_read) war erfolgreich.
|
AW: Liste aller installierten Programme
Der Quelltext aus Beitrag #7 liefert (unter Delphi) falsche Ergebnisse.
Reine 64bit Anwendungen, welche durch einen 64bit Installer installiert wurden werden nicht gelistet! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:40 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