AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

XE7 Dienst programmieren

Ein Thema von AlBo55 · begonnen am 1. Okt 2014 · letzter Beitrag vom 1. Okt 2014
Antwort Antwort
Seite 1 von 2  1 2      
AlBo55

Registriert seit: 17. Jan 2008
Ort: Lieblingshof
30 Beiträge
 
Delphi XE7 Enterprise
 
#1

XE7 Dienst programmieren

  Alt 1. Okt 2014, 13:56
Hallo,
da wollte ich mal einen Dienst programmieren und schon bin ich der Verzeiflung nahe.

ich hab einfach eine Service-Anwendung erstellt.

Das funktioniert:
Delphi-Quellcode:
procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
  AssignFile(f, 'C:\testdatei.txt');
  Rewrite(f);
  WriteLn(f,DatetimeToStr(now)+': Hallo, jemand da?');
  CloseFile(f);
// DB_airport.Params.Values['Server'] := '192.168.178.45';
// DB_airport.Params.Values['Port'] := '3051';
// DB_airport.Params.Values['DataBase'] := 'Test';
// DB_Airport.Connected:=True;
  AssignFile(f, 'C:\testdatei.txt');
  Rewrite(f); // <=======
  WriteLn(f,DatetimeToStr(now)+': Datenbank verbunden');
  CloseFile(f);
end;
Das funktioniert nicht:
Delphi-Quellcode:
procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
  AssignFile(f, 'C:\testdatei.txt');
  Rewrite(f);
  WriteLn(f,DatetimeToStr(now)+': Hallo, jemand da?');
  CloseFile(f);
// DB_airport.Params.Values['Server'] := '192.168.178.45';
// DB_airport.Params.Values['Port'] := '3051';
// DB_airport.Params.Values['DataBase'] := 'Test';
// DB_Airport.Connected:=True;
  AssignFile(f, 'C:\testdatei.txt');
  Reset(f); //<============
  WriteLn(f,DatetimeToStr(now)+': Datenbank verbunden');
  CloseFile(f);
end;
von einer Anmeldung bei der Datenbank ganz zu schweigen.

Fehlermeldung: Dienst "Service1" wurde auf "lokaler Computer" gestartet und dann angehalten. Einige Dienste werden automatisch angehalten, wenn sie nicht von anderen Diensten oder Programmen verwendet werden.

Hat jemand dazu eine Idee?
  Mit Zitat antworten Zitat
pertzschc

Registriert seit: 29. Jul 2005
Ort: Leipzig
309 Beiträge
 
Delphi 12 Athens
 
#2

AW: XE7 Dienst programmieren

  Alt 1. Okt 2014, 14:01
Hat jemand dazu eine Idee?
Der Benutzer, unter dem Dein Dienst ausgeführt wird, darf nicht auf "C:\" schreiben?
Christoph
  Mit Zitat antworten Zitat
AlBo55

Registriert seit: 17. Jan 2008
Ort: Lieblingshof
30 Beiträge
 
Delphi XE7 Enterprise
 
#3

AW: XE7 Dienst programmieren

  Alt 1. Okt 2014, 14:07
er darf ja schreiben, aber nur mit ReWrite, das ist ja das komische. auch DBConnect (auskommentiert) bringt den gleichen Fehler
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#4

AW: XE7 Dienst programmieren

  Alt 1. Okt 2014, 14:10
Alles richtig soweit. Dein Dienst macht genau Das, was Du programmiert hast:
Im Start Event schnell versuchen eine Dateiausgabe zu machen bevor der ServiceThread sofort beendet wird.

Schau Dir mal ein paar TService Tutorials an. Du wirst schnell sehen, wie man TService Start, Stop, Execute, Pause und Continue richtig implementiert.

Der Netzwerkzugriff auf die DB aus dem lokalem Systemkontext heraus muss auch nicht klappen. Dafür nimmt man den "Netzwerkdienst" oder besser ein eigenes Dienstkonto mit expliziten Berechtgungen.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: XE7 Dienst programmieren

  Alt 1. Okt 2014, 15:18
mach mal bei deiner DB-Verbingung ein try...except rum und logge die Exception-Meldung.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
AlBo55

Registriert seit: 17. Jan 2008
Ort: Lieblingshof
30 Beiträge
 
Delphi XE7 Enterprise
 
#6

AW: XE7 Dienst programmieren

  Alt 1. Okt 2014, 16:07
loggen geht ja nicht, kommt gleich obige Fehlermeldung
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#7

AW: XE7 Dienst programmieren

  Alt 1. Okt 2014, 17:12
loggen geht ja nicht, kommt gleich obige Fehlermeldung
Das ist KEINE Fehlermeldung, sondern ein Hinweis, dass Dein Service den ServiceThread sofort nach dem Start EIGENSTÄNDIG beendet hat.

Es gibt 2 Varianten.
a) Dein Code in ServiceStart verursacht eine Exception und schießt den ServiceThread damit ab.
b) Du hast ServiceExecute nicht (richtig) implementiert. Wie das richtig geht (while not Terminated do begin... end) steht in hunderten Tutorials.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.589 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: XE7 Dienst programmieren

  Alt 1. Okt 2014, 17:14
Ich würde das einfach ins Systemeventlog schreiben (TEventLogger aus Unit SvcMgr).

// EDIT:
b) Du hast ServiceExecute nicht (richtig) implementiert. Wie das richtig geht (while not Terminated do begin... end) steht in hunderten Tutorials.
Wobei das nicht so nötig ist. Es geht auch anders, siehe z.B. hier:
http://www.tolderlund.eu/delphi/service/service.htm
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!

Geändert von jaenicke ( 1. Okt 2014 um 17:21 Uhr)
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#9

AW: XE7 Dienst programmieren

  Alt 1. Okt 2014, 17:30
Wobei das nicht so nötig ist. Es geht auch anders, siehe z.B. hier:
http://www.tolderlund.eu/delphi/service/service.htm
Beim überfliegen habe ich dort eben nur 2 Varianten gesehen.
a) "ServiceExecute" hält den Service mit "while not terminated do begin machwas; end;" am Leben
b) die sauberere, aber für den Beginn kompliziertere Variante, mit dem "inneren" ServiceThread

Bevor er sich an Variante "B" wagt sollte "A" aus meiner Sicht erstmal gelingen.
  Mit Zitat antworten Zitat
ol1uw

Registriert seit: 24. Jul 2004
Ort: Freiberg
69 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: XE7 Dienst programmieren

  Alt 1. Okt 2014, 17:49
mal abgesehen von denn anderen angesprochenen Sachen

Delphi-Quellcode:
  AssignFile(f, 'C:\testdatei.txt');
  Reset(f); //<============ siehe http://docwiki.embarcadero.com/Libraries/XE7/de/System.Reset
  WriteLn(f,DatetimeToStr(now)+': Datenbank verbunden');
  CloseFile(f);
end;
Zitat:
Bei einer Textdatei ist F nach dem Öffnen schreibgeschützt.
Uwe
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:21 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