-
Forum: Object-Pascal / Delphi-Language
Delphi
by cherry,
30. Apr 2009
das würde dann genau so sein... nur lieber da als anderswo ;-) vermeiden kann mann das ja sowieso nicht, dass gewisse aktionen inmitten unterbrochen werden müssen.
naja, irgendwie kann ich mich mit dieser methode auch nicht wirlklich anfreunden, ist irgendwie unschön. Diese Abfrage müsste dann ca. 30-Mal irgendwo in meinem Code stehen und da graut mir irgendwie davon. Nundenn, wenn das...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by cherry,
30. Apr 2009
naja, bei dir ist jedenfalls gewährleistet, dass die messages immer abgefangen werden, mit ServiceThread.ProcessRequests(True);.
Dadurch kann bei dir ein solches Problem ja gar nicht bestehen.
Was hälts du den von meiner Thread Variante`?
while not terminated do
begin
if dienststoppen then
begin
-
Forum: Object-Pascal / Delphi-Language
Delphi
by cherry,
30. Apr 2009
hmmm...
du hast im service execute eigentlich nicht viel drin, du regelst alles mit einem timer. Ist das die bessere lösung im allgemeinen.
Denn so wird ja wenigstens immer wieder ServiceThread.ProcessRequests(True); abgefragt..
und bei dir steht da auch true, also er soll auf eine message warten...
vielleicht müsste ich meinen dienst mal mit timer realisieren?!
-
Forum: Object-Pascal / Delphi-Language
Delphi
by cherry,
30. Apr 2009
Mein Dienst benötigt keine Fremdprogramme und keine anderen Dienste, naja, ausser dass ich per ADO auf einen SQL-Server (nicht auf meinem Computer) zugreiffe.
Braucht ADO da noch was ?
Das wird sehr schwierig. Da das was etwas länger gehen könnte eine for- schleife ist die in die Datenbank schreibt...
Ich wüsste nicht wie ich das anstellen sollte. soll ich denn in meiner OnExecute...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by cherry,
27. Apr 2009
hmm... genau wie ichs vermutet habe...
while not terminated do
begin
ServiceThread.ProcessRequests(False);
Sleep(500); // halbe sek. warten
end;
funktioniert einwandfrei... beendet immer korrekt
-
Forum: Object-Pascal / Delphi-Language
Delphi
by cherry,
27. Apr 2009
Leider funktioniert die Geschichte immer noch nicht 100% ig...
kann es sein, dass wenn das "//irgendwas machen" etwas lange dauert, dass der Dienst dann die Message (shutdown) zu spät erhält und desshalb nicht richtig beendet?
wenn ja, was kann ich dagegen tun?
es kann schon mal sein, dass der Dienst irgendwelche scans durchführt oder in die DB schreibt und mehr als 20-30 sekunden...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by cherry,
18. Feb 2009
Tja da ist der Zug wohl abgefahren, mein Dienst umfasst nun bereits mehr als 1500 Zeilen Code und ist eingentlich so gut wie fertig. Ich habe den "Fehler" erst beim Testen bemerkt.
Beim starten des Dienst schreibt er in die Datenbank das er nun "online" ist.
Beim Beenden schreibt er in die Datenbank das er nicht mehr "online" ist...
Bis jetzt hatte ich ja eben auch immer auf False, aber...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by cherry,
18. Feb 2009
Dann bist du mit meinem obigen Beitrag auch einverstanden?
-
Forum: Object-Pascal / Delphi-Language
Delphi
by cherry,
16. Feb 2009
Hmm... Ich habs jetzt probeweise so gemacht:
ServiceThread.ProcessRequests(IsShuttingDownNow);
Die Variable IsShuttingDownNow ist von Anfang an auf False und wird dann in den Ereignissen
OnStop und OnShutdown auf True gesetzt.
Ist das richtig so?!
-
Forum: Object-Pascal / Delphi-Language
Delphi
by cherry,
16. Feb 2009
Wie genau das funktioniert weiss ich leider auch nicht, Tatsache ist aber, dass wenn ich True übergebe, der Dienst an dieser Stelle stehen bleibt und wahrscheinlich eine Message abwartet die er aber nicht erhält.
Die OnExecute Prozedur soll ja immer wieder ausgeführt werden, desshalb ist dort ja auch eine While Schliefe und ein Sleep(1000)
drin.
Oder mach ich dort grundsätzlich was falsch?
-
Forum: Object-Pascal / Delphi-Language
Delphi
by cherry,
15. Jan 2009
Ich hab jetzt mal eingebaut das Service Execute beendet wird wenn "onStop" oder "onShutdown" eintrifft. Das sieht aber ziemlich unschön aus, ist das wirklich die Lösung?
- bei meinen bisherigen Tests wurde zumindest bis jetzt das LogOout immer gemacht...
- leider kommt es manchmal zu einem Fehler wenn ich per net stop den Dienst beende... aber ich konnte nicht lokalisieren an
welcher stelle...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by cherry,
15. Jan 2009
ich hab mir mal das logfile angeschaut und dabei ist mir etwas aufgefallen:
2009-01-09 08:20:59 logfile created!
2009-01-09 08:20:59 Service successfully installed
2009-01-09 08:21:06 logged in with IPAddress: 172.16.4.73
2009-01-09 08:21:06 wrote "fast" logon info into database.
2009-01-09 08:21:26 logged off
2009-01-09 08:23:05 logged in with IPAddress: 172.16.4.73
-
Forum: Object-Pascal / Delphi-Language
Delphi
by cherry,
15. Jan 2009
an dem kanns leider nicht liegen, da ich das schon von anfang an auch dort implementiert habe!
Das probiere ich gleich mal aus...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by cherry,
15. Jan 2009
Naja, mein Dienst greifft auf folgende Ressourcen zu:
Lokal:
- Logfile auf "C:\Programme\MeinDienst\Logfile.log"
- Prozeduren die auf Lokale Dateien zugreiffen (nur Lesen) {ScanAndWriteToDB}
- Prozeduren die Registry Keys lesen (nur lesen)
- Prozedur die angemeldeten Benutzer ausliest
Extern:
- MSSQL DB {ScanAndWriteToDB}
-
Forum: Object-Pascal / Delphi-Language
Delphi
by cherry,
15. Jan 2009
Danke für die schnelle Antworten. Erstmal:
Ne, die MSSQL Datenbank läuft auf einem Server.
Ja tut es. Was für Abhängigkeiten meinst du? -Wie soll ich das realisieren...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by cherry,
15. Jan 2009
Hi
Mein Dienst beendet manchmal korrekt, manchmal nicht. Nicht nur beim manuellen start/stop sondern auch beim Herunterfahren des PC's...
Wenn ich den Dienst manuell beende erhalte ich manchmal die Meldung: "Dienst konnte nicht beendet werden" und die Function "Update Userinfo" wird nicht mehr ausgeführt.
Beim Herunterfahren des PCs werden ja alle Dienste beendet, doch meiner scheint...