Delphi-PRAXiS
Seite 5 von 6   « Erste     345 6      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Programmpfad anderer Programme ermitteln (https://www.delphipraxis.net/118494-programmpfad-anderer-programme-ermitteln.html)

Chrischi 8. Aug 2008 21:16

Re: Programmpfad anderer Programme ermitteln
 
Code:
Benachrichtigung über Debugger-Exception

Im Projekt Project2.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 0045F188 in Modul 'Project2.exe. Lesen von Adresse 0000024' aufgetreten.

DeddyH 8. Aug 2008 21:22

Re: Programmpfad anderer Programme ermitteln
 
Nochmal den ganzen Code bitte *seufz*

Chrischi 8. Aug 2008 21:56

Re: Programmpfad anderer Programme ermitteln
 
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Registry, ComCtrls;

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

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
const
  UNINST_PATH = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall';
var
  Reg: TRegistry;
  SubKeys: TStringList;
  ListItem: TlistItem;
  i: integer;
  sDisplayName, sUninstallString: string;
begin

  ListView1.ViewStyle := vsReport;
  ListView1.Columns.add;
  ListView1.Columns.add;
  ListView1.Columns[0].caption := 'DisplayName';
  ListView1.Columns[1].caption := 'UninstallString';
  ListView1.Columns[0].Width := 300;
  ListView1.Columns[1].Width := 300;

  Reg := TRegistry.Create;

    try
        try
           Listview1.Items.BeginUpdate;
           Listview1.Items.Clear;
           Reg.RootKey := HKEY_LOCAL_MACHINE;
          if Reg.OpenKeyReadOnly(UNINST_PATH) then
          begin
            SubKeys := TStringList.Create;
            try
              Reg.GetKeyNames(SubKeys);
              Reg.CloseKey;
              for i := 0 to subKeys.Count - 1 do
                if Reg.OpenKeyReadOnly(Format('%s\%s', [UNINST_PATH, SubKeys[i]])) then
                  try
                    sDisplayName    := Reg.ReadString('DisplayName');
                    sUninstallString := Reg.ReadString('UninstallString');
                    if sDisplayName <> '' then
                    begin
                      Listview1.Items.Add;
                      ListItem.Caption := sDisplayName;
                      ListItem.subitems.Add(sUninstallString);
                    end;
                  finally
                    Reg.CloseKey;
                  end;
            finally
              SubKeys.Free;
            end;
          end;
        finally
          ListView1.AlphaSort;
          Listview1.Items.EndUpdate;
        end;
    finally
      Reg.CloseKey;
      Reg.Free;
    end;
end;

end.

mkinzler 8. Aug 2008 21:59

Re: Programmpfad anderer Programme ermitteln
 
Jag das Programm mal durch den Debugger.

Chrischi 8. Aug 2008 22:02

Re: Programmpfad anderer Programme ermitteln
 
Zitat:

Zitat von Chrischi
Code:
Benachrichtigung über Debugger-Exception

Im Projekt Project2.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 0045F188 in Modul 'Project2.exe. Lesen von Adresse 0000024' aufgetreten.


HalloDu 8. Aug 2008 22:03

Re: Programmpfad anderer Programme ermitteln
 
Was willst du uns mit dem Selbstzitat sagen? Step doch mal durch und sag uns dann nach welcher Zeile der Fehler auftritt.

mkinzler 8. Aug 2008 22:04

Re: Programmpfad anderer Programme ermitteln
 
Setzte eine Breakpoint und führe das Programm Schritt-für-Schritt aus, dann siehst du in welcher Zeile der Fehler auftritt

Chrischi 8. Aug 2008 22:21

Re: Programmpfad anderer Programme ermitteln
 
Delphi-Quellcode:
                      Listview1.Items.Add;
                      ListItem.Caption := sDisplayName;
                      ListItem.subitems.Add(sUninstallString);
Hier muss der Fehler liegen...

mkinzler 8. Aug 2008 22:24

Re: Programmpfad anderer Programme ermitteln
 
Delphi-Quellcode:
ListItem := Listview1.Items.Add;

Chrischi 8. Aug 2008 22:30

Re: Programmpfad anderer Programme ermitteln
 
Danke, hat geklappt!

So, und wo muss ich nun InstallLocation und, um beim Beispiel zu bleiben, "Mozilla Firefox" eingeben? Hätte gedacht, hier
Delphi-Quellcode:
sDisplayName    := Reg.ReadString('DisplayName');
sUninstallString := Reg.ReadString('UninstallString');
, aber dann findet er nichts. :?:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:37 Uhr.
Seite 5 von 6   « Erste     345 6      

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