Einzelnen Beitrag anzeigen

fips0705

Registriert seit: 13. Sep 2006
45 Beiträge
 
#1

Daten aus der Registry lesen mit TService

  Alt 28. Mär 2007, 09:46
Hallo,

ich versuche einen NT-Dienst zu schreiben, in dem ich prüfe ob ein bestimmter Rechner noch über einen Ping im Netzwerk zu erreichen ist. Dies funktioniert auch sehr gut. Der Dienst lässt sich starten und stoppen, nur wenn ich die gespeicherten Daten aus der Registry lesen will tut sich gar nichts. Er liest die Daten nicht.
Wenn ich den Abschitt für das lesen der Registry deaktiviere, funktioniert die Routine, so wie jetzt wird der Timer nicht vollständig durchlaufen.
Oder kann man im TService nicht in der Registry lesen.
Wo habe ich da einen Denkfehler.
Delphi-Quellcode:
 

//------------------------------------------------------------------------------
// Arbeitsroutine

procedure TService.Timer1Timer(Sender: TObject);
var
  Regi: TRegistry;

const
FileName = 'c:\temp\pinglog.txt';

begin
If RegRead=True then
begin

  Regi := TRegistry.Create;
 try
  Regi.RootKey := HKEY_LOCAL_MACHINE;
  if Regi.OpenKey('SOFTWARE\JF\AutoDown', True) then
   begin
    MIP:=regist.ReadString('IP');
    MZeit:=regist.ReadString('Zeit');
   end
  finally
   regist.Free;
 end;



if MIP = 'then
 begin
     MIP := '127.0.0.1';
     MZeit := '30';
 end;

// ReceiveTimeout einstellen
 ICMP_Service.ReceiveTimeout := 1000;
// Zähler für Shutdown auf null setzen;
 MZaehler:=0;
 RegRead:=False;
end;

AssignFile(f,FileName);
if FileExists(FileName) then Append(f)
else Rewrite(f);

// Ping starten

ICMP_Service.Host := MIP;
// Ping senden
ICMP_Service.Ping;

if ICMP_Service.ReplyStatus.FromIpAddress = '0.0.0.0then
  begin
  if MZaehler <= strtoint(MZeit) then
    begin
     MZaehler:=MZaehler+1;
     IF MZaehler < strtoint(MZeit) then
       writeln(f,inttostr(Mzaehler)+' Ping an IP ' +MIP + ' nicht i.o. ' + datetimetostr(now()))
      else
       begin
       writeln(f,'Shutdown wird eingeleitet '+ inttostr(Mzaehler)+' Ping an IP ' +MIP + ' nicht i.o. ' + datetimetostr(now()));
       CloseFile(f);
// ExWindows(EWX_Poweroff); //Herunterfahren und Ausschalten
       end;
      end;
  end
else
  begin
// Zähler für Shutdown auf 0 setzen;
    MZaehler:=0;
    writeln(f,'Ping an IP ' +ICMP_Service.ReplyStatus.FromIpAddress + ' ok.');

  end;

CloseFile(f);
end;
  Mit Zitat antworten Zitat