Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zugriff auf Classes\CLSID (https://www.delphipraxis.net/204836-zugriff-auf-classes%5Cclsid.html)

venice2 4. Jul 2020 16:14


Zugriff auf Classes\CLSID
 
Ich mache folgendes.

Delphi-Quellcode:
PRegKey.RootKey := HKEY_LOCAL_MACHINE;
FilePath := 'SOFTWARE\Classes\CLSID';
PRegKey.OpenKey(FilePath, False);

if PRegKey.HasSubKeys then
begin
  PRegKey.GetKeyNames(subKeyFilePath);
  PRegKey.CloseKey;
end;
Man geht eigentlich davon aus CLSID jede menge an SubKeys zur verfügung stellt.
Nur warum werden diese nicht mit PRegKey.HasSubKeys erkannt?

Gibt es hier einen Trick den ich anwenden muss um Zugriff zu bekommen?
Eigentlich sollte der gewährt sein beim lesen.

Nebenbei.
Kann man überhaupt eine ActiveX DLL mit FreeLibrary freigeben?
Falls nicht dann kann ich mir das sparen.

hoika 4. Jul 2020 16:55

AW: Zugriff auf Classes\CLSID
 
Hallo,
das geht doch nur ReadOnly?

jaenicke 4. Jul 2020 16:57

AW: Zugriff auf Classes\CLSID
 
Ich vermute einmal, dass die Rechte fehlen und OpenKey schlicht false zurück liefert. Den Rückgabewert ignorierst du leider komplett...

Es gibt stattdessen auch OpenKeyReadOnly, für das du weniger Rechte benötigst.

venice2 4. Jul 2020 17:06

AW: Zugriff auf Classes\CLSID
 
Zitat:

Zitat von jaenicke (Beitrag 1468841)
Ich vermute einmal, dass die Rechte fehlen und OpenKey schlicht false zurück liefert. Den Rückgabewert ignorierst du leider komplett...

Es gibt stattdessen auch OpenKeyReadOnly, für das du weniger Rechte benötigst.

Ich ignoriere gar nichts denn ich habe nur das gepostet was im Context zu meiner Frage stand.
Werde es mal mit OpenKeyReadOnly versuchen.

Dann noch mal nicht geschrieben sondern eingefügt. (copy\paste)
Delphi-Quellcode:
            FilePath := 'SOFTWARE\Classes\CLSID\';
            if PRegKey.OpenKey(FilePath, False) then
            begin
              if PRegKey.HasSubKeys then
              begin
                PRegKey.GetKeyNames(subKeyFilePath);
                PRegKey.CloseKey;
              end;
            end;
funktioniert genau sowenig.
Wie komme ich sonst an die Pfade der DLL's ?

himitsu 4. Jul 2020 19:53

AW: Zugriff auf Classes\CLSID
 
Nur weil man die Rückgabewerte (teilweise) auswertet, funktioniert der Code nicht plörlich, wenn er auch Ohne bereits Fehler ausgelöst hatte und sich an der eigentlich Funktion garnichts geändert hat.

Wenn man aber die Rückgaben "richtig" auswerten würde, dann wüsste man wenigstens warum es nicht geht.

venice2 4. Jul 2020 19:56

AW: Zugriff auf Classes\CLSID
 
Zitat:

Zitat von himitsu (Beitrag 1468845)
Nur weil man die Rückgabewerte (teilweise) auswertet, funktioniert der Code nicht plörlich, wenn er auch Ohne bereits Fehler ausgelöst hatte und sich an der eigentlich Funktion garnichts geändert hat.

Wenn man aber die Rückgaben "richtig" auswerten würde, dann wüsste man wenigstens warum es nicht geht.

Richtig.
Nur es hilft mir leider nicht bei meinem Problem wie ich an den Pfad der DLL komme.

himitsu 4. Jul 2020 20:13

AW: Zugriff auf Classes\CLSID
 
Delphi-Quellcode:
FilePath := 'SOFTWARE\Classes\CLSID\';
if PRegKey.OpenKey(FilePath, False) then
begin

end
else
  RaiseLastOSError;
Und schon gelesen was die Anderen schrieben?

Wer möchte raten, was mit Close nach dem Open passiert, wenn es keine SubKeys gibt?
Zitat:

Delphi-Quellcode:
if PRegKey.OpenKey(FilePath, False) then
begin
  if PRegKey.HasSubKeys then
  begin
    ...
    PRegKey.CloseKey;


venice2 4. Jul 2020 20:20

AW: Zugriff auf Classes\CLSID
 
Zitat:

Zitat von himitsu (Beitrag 1468848)

und schon gelesen was die anderen schrieben?

Entschuldige.
Schon gelesen?
Zitat:

Ich ignoriere gar nichts denn ich habe nur das gepostet was im Context zu meiner Frage stand.
Es geht nicht darum ob ich einen Key schließe (was ich natürlich tue) sondern darum warum ich keinen Zugriff bekomme.
Ob ich dann RaiseLastOSError; auswerte ist doch eine ganz andere Geschichte.

Alles andere hat schon seine Richtigkeit.
Ich kann den Key nicht öffnen versuche es doch einfach einmal.
Danke!

Uwe Raabe 4. Jul 2020 20:58

AW: Zugriff auf Classes\CLSID
 
Ich kann - mit einer marginalen Modifizierung deines Codes gemäß der Empfehlung von Sebastian:
Delphi-Quellcode:
      FilePath := 'SOFTWARE\Classes\CLSID\';
      if PRegKey.OpenKeyReadOnly(FilePath) then
      begin
        if PRegKey.HasSubKeys then
        begin
          PRegKey.GetKeyNames(subKeyFilePath);
          PRegKey.CloseKey;
        end;
      end;

venice2 4. Jul 2020 21:06

AW: Zugriff auf Classes\CLSID
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1468850)
Ich kann - mit einer marginalen Modifizierung deines Codes gemäß der Empfehlung von Sebastian:
Delphi-Quellcode:
      FilePath := 'SOFTWARE\Classes\CLSID\';
      if PRegKey.OpenKeyReadOnly(FilePath) then
      begin
        if PRegKey.HasSubKeys then
        begin
          PRegKey.GetKeyNames(subKeyFilePath);
          PRegKey.CloseKey;
        end;
      end;

Nun dann öffnest du den Key mit Adminrechten denn bei mir geht es nicht.
Gleicher Code. (Ich öffne den Key in einer DLL, vergessen zu sagen)

Auch nicht mit 'SOFTWARE\Classes\Wow6432Node\CLSID';

EDIT.
bzgl. OpenKeyReadOnly und OpenKey
Zitat:

Just use OpenKey instead of OpenKeyReadOnly, this won't reset your Access property.
siehe

Nochmal komplett. Ohne PRegKey.CloseKey; wird aber verwendet

Delphi-Quellcode:
PRegKey := TRegistry.Create(KEY_READ);
PRegKey.RootKey := HKEY_LOCAL_MACHINE;
           
FilePath := 'SOFTWARE\Classes\Wow6432Node\CLSID'; // ob ich direkt auf Wow6432Node gehe oder nicht sollte eigentlich egal sein.
if PRegKey.OpenKey(FilePath, False) then
  begin
    if PRegKey.HasSubKeys then
    begin
      PRegKey.GetKeyNames(subKeyFilePath);
      PRegKey.CloseKey;
    end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:38 Uhr.
Seite 1 von 4  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