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 ...
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.
X-Base Programm als Dienst laufen lassen & ...
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 194
- Registriert: Fr, 24. Feb 2006 8:09
- Kontaktdaten:
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
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 ...
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
Hubert
-
- Rekursionen-Architekt
- Beiträge: 194
- Registriert: Fr, 24. Feb 2006 8:09
- Kontaktdaten:
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()“
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
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()“
Dazu habe ich bisher folgendes festgestellt:„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.“
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