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.0'
then
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;