Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Programmpfad Firefox (https://www.delphipraxis.net/153539-programmpfad-firefox.html)

youuu 6. Aug 2010 23:09


Programmpfad Firefox
 
Hi,

ich vrsuch den Programpfad von Firefox so zu ermittel:

Delphi-Quellcode:
procedure TFormMain.Button2Click(Sender: TObject);
const
  UNINST_PATH = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall';
var
  Reg: TRegistry;
  SubKeys: TStringList;
  i: integer;
  sDisplayName, sUninstallString: string;
begin
  Reg := TRegistry.Create;
  with Reg do
    try
      RootKey := HKEY_LOCAL_MACHINE;
      if OpenKeyReadOnly(UNINST_PATH) then
      begin
        SubKeys := TStringList.Create;
        try
          GetKeyNames(SubKeys);
          CloseKey;
          for i := 0 to subKeys.Count - 1 do
            if OpenKeyReadOnly(Format('%s\%s', [UNINST_PATH, SubKeys[i]])) then
              try
                sDisplayName := Reg.ReadString('Comments');
                sUninstallString := Reg.ReadString('InstallLocation');
                if sDisplayName <> '' then
                begin
                  if sDisplayName = 'Mozilla Firefox' then
                  begin
                    showmessage(sUninstallString+'\'+sDisplayName);
                  end;
                end;
              finally
                Reg.CloseKey;
              end;
        finally
          SubKeys.Free;
        end;
      end;
    finally
      CloseKey;
      Free;
    end;
end;
abgeleitet von hier: hier

Bekomm allerdings eine Fehlermeldung:
access violation at 0x77cd4eec: write of address 0x00030ffc

Fehler tritt nur auf bei
Delphi-Quellcode:
 showmessage(sUninstallString+'\'+sDisplayName);
Wie kann bei "Shomessage" denn eine access auftreten?

xZise 6. Aug 2010 23:17

AW: Programmpfad Firefox
 
Moin,
hast du vielleicht selber eine Methode geschrieben, die showmessage heißt? Weil laut Hilfe dürfte Delphi-Referenz durchsuchenTRegistry.ReadString() kein nil zurückgeben.

Vielleicht hilft da dann, die Unit anzugeben, wo er das ShowMessage zu suchen hat:
Delphi-Quellcode:
Dialogs.ShowMessage('foobar');
MfG
Fabian

wicht 6. Aug 2010 23:38

AW: Programmpfad Firefox
 
Es muss etwas in der Richtung wie von xZise beschrieben sein. Hier funktioniert es ohne Probleme. Versuch den Code mal in einem neu angelegten Projekt auszuführen...

xZise 7. Aug 2010 00:59

AW: Programmpfad Firefox
 
Übrigens, wenn dein Programm unter 64 bit läuft musst du auch woanders gucken. Ich habe es z.B. da gefunden:
Code:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Mozilla Firefox (4.0b2)
MfG
Fabian

PS: Warum nutzt du eigentlich nicht den With-Block? Abgesehen davon, dass ich ihn da eh raus genommen hätte?

mkinzler 7. Aug 2010 07:12

AW: Programmpfad Firefox
 
Und auch nur, wenn der Firefox per Installer eingerichtet wurde

himitsu 7. Aug 2010 07:40

AW: Programmpfad Firefox
 
Zitat:

Zitat von youuu (Beitrag 1040107)
Wie kann bei "Shomessage" denn eine access auftreten?

Als Erstes schaut man sich mal die übergebenen Parameter an.
Und vorallem die verwendeten Variablen, denn der Fehler muß nicht unbedingt in der Funktion auftreten, da in der selben Zeile auch noch quasi ein ConcatString versteckt ist. :stupid:

Und wenn schon With, warum dann nicht konsequent?
Delphi-Quellcode:
with Reg do
  Reg.ReadString('Comments');
  Reg.ReadString('InstallLocation');
  Reg.CloseKey

Luckie 7. Aug 2010 07:45

AW: Programmpfad Firefox
 
Zitat:

Zitat von xZise (Beitrag 1040110)
PS: Warum nutzt du eigentlich nicht den With-Block? Abgesehen davon, dass ich ihn da eh raus genommen hätte?

Er sollte ihn besser ganz rausnehmen. Dann kommt auchn icht so was bei raus:
Delphi-Quellcode:
Reg.Reg.CloseKey
OK, zu spät.

xZise 7. Aug 2010 09:02

AW: Programmpfad Firefox
 
Ich wollte nicht eigentlich groß über den with-Block argumentieren und habe deshalb nur kurz gesagt, er solle ihn doch aber eher besser rausnehmen.

@ himitsu: Und wo kann bei einem Concat von zwei Strings eine AV auftreten?

@ Threadersteller: Ich würde dir vorschlagen, ob man nicht eventuell anders an den Pfad von Firefox kommt.
@ mkinzler: Bei der portablen Version würde es nicht so viel sinn ergeben, den Programmpfad zu suchen, weil der könnte in 0,nix ungültig werden.

MfG
Fabian

himitsu 7. Aug 2010 09:26

AW: Programmpfad Firefox
 
@xZise: defekte Strings?

Bernhard Geyer 7. Aug 2010 10:18

AW: Programmpfad Firefox
 
Zitat:

Zitat von himitsu (Beitrag 1040122)
@xZise: defekte Strings?

Wenn man per COM/OLE Widestrings bekommt kann es schon mal sein das diese eher einen nil-Pointer als eine leeren String darstellen.


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

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