Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Registrykomponente gesucht (https://www.delphipraxis.net/145962-registrykomponente-gesucht.html)

amigage 11. Jan 2010 15:15


Registrykomponente gesucht
 
Hallo,

ich suche eine Registrykomponente, mit der ich Registryzweige extrahieren kann.
Das Delphi-eigene TRegistry bietet zwar eine Möglichkeit an, eine Hive-Datei zu erstellen.
Ich benötige jedoch die Daten in einem lesbaren Format, so wie der Registryeditor
die Daten schreibt, wenn man beim Export das Format "Win9x-/NT4-Registrierungsdateien"
wählt.

Achso, die Komponente sollte auch D2009 (unicode) kompatibel sein.

Besten Dank für jeden Tipp.

Luckie 11. Jan 2010 15:24

Re: Registrykomponente gesucht
 
Suchst du so was: http://www.michael-puff.de/Developer...Save_Key.shtml

amigage 11. Jan 2010 15:47

Re: Registrykomponente gesucht
 
Hallo Luckie,

besten Dank für Deine Antwort.

Ich habe jetzt meine IDE nicht vor mir (schreibe von unterwegs).
Ist der Code von Dir? Er kommt mir recht kurz vor :-D

Erhalte ich da wirklich das Ergebnis wie beim genannten Registryexport?
Auf alle Fälle werde ich es mir nachher gleich einmal anschauen, ob es
genau das ist, was ich suche. Wichtig ist für mich, dass die Registryauszüge
lesbar sein müssen.

Luckie 11. Jan 2010 15:49

Re: Registrykomponente gesucht
 
Nope, ist von Nico, steht doch auch drunter. Und ich meine, es käme eine Texdatei dabei raus. Bin mir aber nicht mehr ganz sicher. Musst du einfach mal ausprobieren.

amigage 11. Jan 2010 18:07

Re: Registrykomponente gesucht
 
Leider ist es so, wie ich es befürchtet habe. Die Funktion erstellt
eine nicht lesbare Datei, die nicht dem Registryexport entspricht.

Gibt es noch andere Möglichkeiten?

Astat 11. Jan 2010 18:45

Re: Registrykomponente gesucht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von amigage
Gibt es noch andere Möglichkeiten?

Jupp, siehe Beilage

lg. Astat

amigage 11. Jan 2010 19:16

Re: Registrykomponente gesucht
 
Hallo Astat,

besten Dank für die Unit. Auf den ersten Blick sieht alles gut aus.
Nur habe ich gesehen, dass die Unit den Registrytypen REG_EXPAND_SZ (hex(2):) nicht kennt und daraus einen einfachen Typen, also REG_SZ macht.

Astat 11. Jan 2010 22:26

Re: Registrykomponente gesucht
 
Zitat:

Zitat von amigage
Hallo Astat,
besten Dank für die Unit. Auf den ersten Blick sieht alles gut aus.
Nur habe ich gesehen, dass die Unit den Registrytypen REG_EXPAND_SZ (hex(2):) nicht kennt und daraus einen einfachen Typen, also REG_SZ macht.

Hallo amigage, bei den Sourcen sind sowiso einige Änderungen notwendig (Regedit 4 zu 5) etc.
Solltest dann auch gleich REG_EXPAND_SZ nachziehen.

Wäre natürlich nett, wenn Du uns danach die Änderungen zukommen lassen würdest.

Sollte irgendwo größere Probleme auftreten meld dich wieder.

lg. Astat

Ralf Kaiser 12. Jan 2010 09:39

Re: Registrykomponente gesucht
 
Wie wäre es einfach mittels ShellExecute Reg.EXE mit den passenden Parametern aufzurufen?

Delphi-Quellcode:
C:\>REG EXPORT /?

REG EXPORT Schlüssel Datei[/y]

  Schlüssel        STAMMSCHLÜSSEL[\Unterschlüssel] (nur lokaler Computer).
    STAMMSCHLÜSSEL [ HKLM | HKCU | HKCR | HKU | HKCC ]
    Unterschlüssel Vollst. Name eines Registrierungsschlüssels unter dem
                    STAMMSCHLÜSSEL.

  Datei            Name der zu exportierenden Datenträgerdatei..

  /y               Erzwingt das Überschreiben der vorhandenen Datei ohne
                    Aufforderung.

Beispiele:

  REG EXPORT HKLM\Software\MyCo\MyApp AppBkUp.reg
    Exportiert alle untergeordnete Schlüssel und Werte des Schlüssels
    MyApp in die Datei AppBkUp.reg
Das erzeugt eine lesbare *.REG Datei und passt auch dann wenn sich irgendwelche registryinternen Dinge in Zukunft ändern sollten.

Ciao,
Ralf

amigage 13. Jan 2010 10:35

Re: Registrykomponente gesucht
 
@Alfi001:
Das ist natürlich auch eine Variante. Aber gibt es denn nicht Probleme bei Anwendern mit beschränkten Zugriffsrechten? Das möchte ich natürlich ausschließen.

Ralf Kaiser 13. Jan 2010 10:40

Re: Registrykomponente gesucht
 
Es könnte natürlich Probleme geben wenn man auf Teile der Registry zugreifen will auf die der aktuelle Benutzer keinen Zugriff hat. Das habe ich noch nie ausprobiert. Ich verwende diese Methode in einigen Programmen um Backups von einigen Registryzweigen zu machen (Konfiguration eigener Programme). Bisher hatte ich noch keine Probleme, allerdings waren die entsprechenden Stellen der Registry für die Benutzer auch nicht eingeschränkt.

Probiers doch einfach mal aus :wink:

amigage 13. Jan 2010 10:50

Re: Registrykomponente gesucht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Astat
Wäre natürlich nett, wenn Du uns danach die Änderungen zukommen lassen würdest.

Ich hatte angefangen, mich damit zu beschäftigen, habe es jedoch aufgrund der Seite http://qc.embarcadero.com/wc/qcmain.aspx?d=23428 sein gelassen, da die mitgelieferte registry.pas in Delphi2009 viele Schlüsseltypen nicht kennt. Ich habe zwar die Erweiterung aus dem Jahr 2006 durchgeführt, bekomme es aber nicht kompiliert.

Ich habe dann doch noch einen anderen Registryexport ausfindig machen können, die beim Auslesen der Datentypen einen anderen Weg geht, nämlich über die windows.pas

Code unter: http://www.experts-exchange.com/Prog..._24754350.html

Ich habe hauptsächlich in der Funktion ExportProc() Änderungen vorgenommen. (siehe Anhang)

Was mich ein wenig stört, ist dieser Part:

Delphi-Quellcode:
      REG_BINARY :
        begin
          st_datatype := 'hex:';
          st := st_valuename + st_datatype;
          dataLen := Round(dataLen / 2);
          for j := 0 to dataLen - 1 do
          begin
            st_part := LowerCase(WideCharToHexStr(PChar (data) [j]));

            if j < dataLen - 1 then
              st_part := st_part + ',';

            st := CheckLineLength(st, st_part);
            If (st[length(st)] = '\') then Delete(st, length(st), 1);
          end;
        end;
Ich muss unter Delphi 2009 wegen der Behandlung von Strings als Unicode, die Datenlänge halbieren und mit der Funktion WideCharToHexStr() die Unicode-Daten entsprechend in HEX umwandeln.

Delphi-Quellcode:
  // Unicode in Hex-Format wandeln für Reg_binary
  function WideCharToHexStr(Value: Char): string;
  var
    Ch : Char;
    code : String;
  begin
    code := IntToHex(Ord(Value), 4);
    if Ch = #0 then code := IntToHex(Ord(Value), 4);
    // swapBytes
    Result := code[3]+code[4]+','+code[1]+code[2];
  end;
Geht das nicht einfacher und kann ich das Halbieren der Datenlänge für die for-Schleife ändern? Es ist ja fehleranfällig, da es auch ungerade Datenlängen gibt, ich dann aber so immer noch ein Byte 00 zusätzlich erhalte...

amigage 14. Jan 2010 18:54

Re: Registrykomponente gesucht
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich habe noch ein wenig dran geschraubt und bin auch der Halbierung von Datenlängen aus dem Weg gegangen.
Die Tests vom Abbild meiner Registry ergaben nur minimale Abweichungen, wie zusätzliche Leerzeilen, etc.

Die Unit ist D2009 kompatibel. Die Funktionen werden wie in der Registry.pas aufgerufen.
Ansonsten werden folgende Datentypen unterstützt:

REG_NONE
REG_DWORD
REG_BINARY
REG_SZ
REG_MULTI_SZ
REG_EXPAND_SZ

11 (QWORD)
188 (keine offizielle Bezeichnung gefunden)

Andere sind mir bisher nicht untergekommen.
Feedbacks und Hinweise sind willkommen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:20 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