X-Base Programm als Dienst laufen lassen & ...

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
notloesung
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 194
Registriert: Fr, 24. Feb 2006 8:09
Kontaktdaten:

X-Base Programm als Dienst laufen lassen & ...

Beitrag von notloesung »

Hi @all,

es stimmt, ich war schon länger nicht mehr im Forum unterwegs.
... aber wenn man was braucht dann findet man eben schnell den Weg nach hause ... :wink:

Kurz vorab:
- Das Thema „Dienste“ ist wirklich Neuland für mich.
- Das Beispiel „...ALASKA\XPPW32\SOURCE\samples\apps\SimpleService“ habe ich ohne Probleme zum laufen gebraucht.
- Ein eigener Dienst läuft solange ich nicht auf die DB zugreife. Er bricht beim laden der DBE mit dem Fehler 1067 „Prozess wurde unerwartet beendet“ ab.

Zum Hintergrund:
- Habe eine Anwendung die als Server fungiert (reine Konsoleanwendung) (Prog. B).
- Ein weiteres (separates) Programm stellt die GUI zur Verfügung (Prog. C).
- Und noch eins welches sich um den Start des Servers kümmert (Prog. A).

Bis jetzt läuft alles wenn es eben „normal“ gestartet wird (also am Rechner anmelden und Prog. starten).

Funktionsweise:
Über die GUI können alle notwendigen Serverparameter eingestellt werden.
Auch das Starten und Stoppen des Servers wird von hier gesteuert.
Das Prog. A läuft ständig und startet beim Bedarf den Server.
Wird also über die GUI der Server gestartet so passiert dies indem ein Flag in einer DB gesetzt wird. Das Prog. A prüft alle paar Sek. dieses Flag, ist es entsprechend gesetzt startet es über (bisher) RunShell das Serverprogramm.

Jetzt will ich das ganze folgendermaßen umstrukturieren:
Das Prog. A (welches den eigentlichen Server beim Bedarf startet) soll als Dienst laufen. Weiter wie bisher soll über die GUI der Server gestartet werden indem ein DB Flag gesetzt wird. Der Dienst (Prog. A) soll dann das Serverprogramm starten, allerdings ebenfalls als Dienst.

Problem:
Wenn ich den Dienst (Prog. A) starte bricht er beim laden der DBE ab. Woran mag das liegen? Rechte? ... und wie lässt es sich beseitigen?

Und bisher habe ich keine Ahnung von:
Kann ich aus einem Dienst heraus einen anderen starten? Und wie funktioniert das eigentlich? Über die RunShell wie bisher wird es glaube ich nicht gehen, oder?

Danke schon mal für alle Infos.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

ich habe mit Diensten noch nicht viel gemacht ...
aber ich weiß, dass 1. keine USER Variablen/Einstellungen zur Verfügung stehen, d.H. die DLLs müssen ins Programmverzeichnis.
Und 2. muss man etwas tun um die Ausführungsberechtigung als Dienst zu erlauben. Das müsste im Beispielprogramm stehen, eventuell hast du es damals auch gemacht und beim neuen vergessen ...
Gruß
Hubert
notloesung
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 194
Registriert: Fr, 24. Feb 2006 8:09
Kontaktdaten:

Beitrag von notloesung »

Hallo Hubert,

beides stimmt.
DLLs müssen ins Programmverzeichnis und dem User muss die Berechtigung zugewiesen werden Programme als Dienst starten zu können.

Es scheint jetzt alles zu laufen.
Ein Programm läuft jetzt als Dienst (Lokales System). Dieser Dienst startet bei Bedarf einen anderen Dienst. Diesem (zweiten) Dienst habe ich ein Userkonto zugewiesen. Und dies aus dem Grund, weil er wiederum beliebige exe Anwendungen startet (diese greifen auf Daten unseres ADS, und dafür wird ein User benötigt).

Die Dienste habe ich mit der Windows Anwendung „instsrv.exe“ registriert.
Gestartet werden sie mit „RunShell( "/C net start X-SERVER", , .T., .T. )“.

Nicht unterschätzen sollte man dabei den Hinweis aus der Xbase Doku zur „:setInterval()“
„Das Zeitintervall, nach dem ein Thread erneut gestartet wird, kann von dem Wert <nHSeconds> abweichen. Der tatsächlich erreichte Wert kann über die Instanzvariable :deltaTime abgefragt werden.“
Dazu habe ich bisher folgendes festgestellt:
Der Ausführungszeitpunkt bei einem Thread der 4 Tage, alle 3 Std. lief verschob sich um ca. 10 Minuten. Bei einem anderen Thread der alle 60 Sekunden lief verschob sich der Startzeitpunkt um ca. 1 Minute in 4 Tagen.
(Bei kürzeren Tests fiel dies nicht auf.)

Schöne Grüße,
Notloesung
Antworten