Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Thread.Execute - Registry auslesen - Problem (https://www.delphipraxis.net/38295-thread-execute-registry-auslesen-problem.html)

Susanne 17. Jan 2005 12:24


Thread.Execute - Registry auslesen - Problem
 
Ich habe einen Dienst, der in der serviceExecute-Methode einen Thread aufruft. In diesem Thread möchte ich in der Execute-Methode prüfen, ob in der Registry in einem bestimmten Eintrag ein bestimmter Wert steht und wenn ja soll er was machen, ansonsten übergehen. Sieht folgendermassen aus:


Delphi-Quellcode:
procedure TimeManagerThread.Execute;
   var
      neueinlesen: STring;
   begin
      FormCreate;
      while not Terminated do
  1*       begin
         //Registry auslesen
         reg.RootKey:= HKEY_LOCAL_MACHINE;
         //Gibt es den benötigten Key in Registry?
         if reg.KeyExists('Software\TM\7.0\General') then
            begin
               reg.OpenKey('Software\TM\7.0\General', false);
               neueinlesen:= reg.ReadString('again');
               reg.CloseKey;
               if (neueinlesen = '159') then
                  FormCreate;
  2*          end;
         TimerTimer(self);
         end;
      Timer.Free;
      ClockTimer.Free;
   end;
Problem ist nun folgendes. Lasse ich den Teil zwischen 1* bis 2* weg, läuft das ganze einwandfrei, nehme ich das ganze aber mit in den Quellcode hinein, kann ich den Dienst starten, aber er lässt sich nicht mehr beenden.

Woran kann das liegen? Irgendwer eine Ahnung?

shmia 17. Jan 2005 13:32

Re: Thread.Execute - Registry auslesen - Problem
 
Beim Zugriff auf HKEY_LOCAL_MACHINE sind die Zugriffsrechte meistens auf READ-ONLY beschränkt.
Deshalb:
Delphi-Quellcode:
   reg.Access := KEY_READ;  // <- wir wollen nur Lesen
  //Registry auslesen
   reg.RootKey:= HKEY_LOCAL_MACHINE;
  //Gibt es den benötigten Key in Registry?
  ....

Susanne 17. Jan 2005 13:38

Re: Thread.Execute - Registry auslesen - Problem
 
wenn ich aber administrator bin, habe ich doch lese und schreib -Rechte

weil später an anderer Stelle schreibe ich in den Key

Luckie 17. Jan 2005 13:42

Re: Thread.Execute - Registry auslesen - Problem
 
Und unter welchem Account läuft der Dienst? Doch wohl unter dem System-Konto oder wann wird der Dienst wie gestartet?

Susanne 17. Jan 2005 13:56

Re: Thread.Execute - Registry auslesen - Problem
 
der Dienst wird unter einem User-Konto gestartet, der auch Rechte zum Lesen und Schreiben auf Local-Machine haben sollte. Funktioniert sonst ja auch, da ich an verschiedenen Stellen schon in Local-machine reinschreibe und es bisher klappt.

Aber wenn ich eben an dieser einen Stelle aus local-machine lesen will, da kann ich den Dienst nicht mehr beenden und das ist das was ich einfach nicht begreife. Wenn ich sonst an jeder Stelle im Thread in den Schlüssel reinschreiben kann und lesen kann, warum nicht an der Stelle?

Luckie 17. Jan 2005 14:03

Re: Thread.Execute - Registry auslesen - Problem
 
Die Methode OpenKey von TRegistry ist eine Funktion. Eventuell mal den Rückgabwert prüfen und wenn OpenKey fehlschlägt mal mit GetLastError gucken warum bzw. was nicht geklappt hat.


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