Service und GUI

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Service und GUI

Beitrag von Rudolf »

Hallo,
ich kann es Probleme geben wenn ich ein GUI Programm als Service starte und dann z.B. ein Dialog im Grafikmode aufgerufen wird ? Das Programm sollte wahlweise normal oder als Service gestartet werden können und ist im GUI Mode programmiert. Bei meinen Funtktionen für Message Dialoge, Progressbar etc. habe ich schon überall ein Flag ob das Programm im Silent Modus ausgeführt wird, dann werden diese Dialoge unterdrückt. Aber trotzdem könnte mal ein Fenster unbeabsichtigt aufgehen.
Grüße
Rudolf
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Service und GUI

Beitrag von ramses »

Hallo Rudolf

es ist schon einige Zeit her, als ich 2010, vor der selben Frage stand, wenn ich mich recht errinnere ist es so dass wenn du ein Dialog/Msgbox in einem Service hast und diesen öffnest dieser Dialog/Msgbox nicht angezeigt wird und der Thread stehen bleibt.

Ich habe mich damals entschieden Service-Programme (Web-App) nur mit einem CRT-Fenster aufzubauen in diesem die aktuellen Logs anzuzeigen und ausser einer Abfrage auf ESC (beim Start als Programm) keinerlei Abfragen, GUI-Element usw. in die EXE einzubauen. Der Service muss völlig ohne User-Eingriffe arbeiten können auch im Fehlerfall (Runtimeerror). Dazu brauchst du im Service zusätzliche Funktionen so z.B. ein Ablauf-Log u.a.

Du solltest dich entscheiden GUI oder Service beides in der selben EXE wird entweder sehr aufwenig und/oder sehr fehlerträchtig. Mein oben beschriebener Weg hat sich über die Jahre sehr bewährt.

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Service und GUI

Beitrag von Rudolf »

Hallo Carlo,
danke für die Antwort, wenns nur Messageboxen sind die stehenbleiben hab ich kein Problem. Hab ein globales Flag für den sog Silent Mode bei dem keine der Dialogfunktionen in meiner lib angezeigt wird. Ausserdem gibt es überall einen Timeout. Dachte dass es grundsätztlich Probleme geben könnte beim Aufruf von GUI Dialogeelementen. Bei dem Programm handelt es sich um den Webserver von Boris, ich muss ihn mit einem großen Programm von mir kombinieren, da habe ich keine andere Wahl.
Grüße
Rudolf
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Service und GUI

Beitrag von brandelh »

Das Problem ist NICHT das Anzeigen eines Dialoges, sondern dass dieser nie eine Antwort erhalten kann (Kein User der etwas sieht oder klickt).
Solange das nicht passiert sollte das Programm normal laufen.
Ach ja, es gibt auch keine USER Verzeichnisse oder USER Rechte, also z.B. Laufwerkszuordnungen oder Pfade etc. bzw. es werden die des Systemusers verwendet.
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Service und GUI

Beitrag von Martin Altmann »

GUI-Elemente haben in einem Dienst nichts verloren, da ein Dienst auch läuft, ohne dass ein Desktop da ist - somit kann nichts angezeigt werden!
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Service und GUI

Beitrag von ramses »

Hallo Rudolf

ich würde mir diesen Schritt gut überlegen. Das Problem sind aus meiner Sicht die Dialoge, weil Sie niemand sieht(wie Hubert präsisiert hat) und diese nie eine Antwort erhalten. Mit den Timeouts ist es so eine Sache, wenn der User nach 3 Sekunden keine Reaktion einer Webseite sieht beginnt doch schon das rumgeklicke und du als Entwickler hast keine Ahnung wo dein Programm stehen blieb, wartet usw. ..... Ich habe meine Programme resp. PRG Files aufgeteilt in 3 Teile:

Teil 1: Wird nur vom Web-Server verwendet
Teil 2: Wind nur von GUI verwendet.
Teil 3: Wird von beiden verwendet, diese haben ein Flag "#define isWebServer" dieses bindet / aktivert das Action-Log und sperrt die wenigen msgbox() aus die in diesen Funktionen noch enthalten sind.

Am Anfang ging ich auch den leichten Weg, verwenden des selben Programms, ich hatte damit nur Probleme, erst obige Aufteilung brachte die grosse Zufriedenheit und vorallen vergiss nicht eine umfangreiche LOG Funktion einzubauen. Inkl. Anwortzeit usw.

@Hubert Laufwerkzuordnungen sind sehr wohl möglich, entweder beim einrichten des Dienstes oder mit dem API-Aufruf WNetAddConnection2A



Nachtrag: Ich sehe gerade Martins Beitrag: Sehr treffend formuliert. So ist es.

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Service und GUI

Beitrag von Tom »

Hallo, Rudolf.

Ich mache das gleiche. Der sehr umfangreiche Server kann entweder als normales Programm (optional Systray) oder als Dienst genutzt werden. Wenn er als normales Programm arbeitet, gibt es einen Startdialog, Einstellmöglichkeiten und ein Überwachungsfenster, wenn er als Dienst arbeitet, gibt es das alles nicht. Wenn ich vergesse, etwas auszuklammern, das im Dienst-Modus nicht geht, stirbt der Server an dieser Stelle. In diesem Zusammenhang muss man nicht nur auf die GUI achten, sondern auch auf möglicherweise Diensten nicht zur Verfügung stehende Shares und das sich anders verhaltende Environment. Ansonsten ist das problemlos.
Herzlich,
Tom
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Service und GUI

Beitrag von Rudolf »

Hallo,
leider habe ich keine Wahl, ausser gewaltige Mengen Code durchforsten um alle Probleme mit Dialogen 100%ig auszuschließen. Da ich alles sehr detailliert mitprotokolliere und gründlich Teste dürften ev. Probleme mit solchen Dialogen in der Testphase schon entdeckt werden. Der Hinweis bezüglich Pfaden etc. ist für mich ev. wichtig.
Grüße
Rudolf
DelUser01

Re: Service und GUI

Beitrag von DelUser01 »

Hallo Rudolf,

habe in der Vergangenheit auch immer wieder versucht umfangreiche Programme im Hintergrund automatisch ablaufen zu lassen. Zwar nicht explizit als Service, aber per Sheduler ohne angemeldetem User.
Das hat zwar meist eine Zeit lang funktioniert, es gab aber immer wieder Probleme. Ich finde dass die Kontrolle so eines Programms das Problematischste ist.
Schlussendlich laufen diese Programme jetzt immer mit angemeldetem User (Administrator) auf den Servern. Damit können die Aktivitäten des Programms im Bedarfsfall auch direkt beobachtet werden. Das ist für die Administratoren das Wichtigste.

In Applikationen welche permanent weiterentwickelt werden kommt es immer wieder zu neuen Problemen/Fehlern (zumindest bei mir mit Xbase++ :-) ). Da ist das Überwachen solcher Hintergrund-Programme über mitloggen sehr aufwendig und niemals 100%ig.
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Service und GUI

Beitrag von Rudolf »

Hallo Roland,
ich bevorzuge auch Programme mit normalen Fenstern, aber brauche für den Kunden zumindest die Möglichkeit für den Start als Service, könnte sein dass es eh nie relevant wird (zumindest hoff ich es)
Grüße
Rudolf
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Service und GUI

Beitrag von Tom »

Dienste habe im Vergleich zu Hintergrundprogrammen (keine gute Idee!) viele Vorteile. Sie verfügen über einen expliziten Kontrollmechanismus, können mit eigenen Rechten laufen, verfügen über zusätzliche Zustände (angehalten, im Startprozess) und sind vom Normalbenutzer nicht so leicht zu killen. Sie werden bei korrekter Installation automatisch mitgestartet und können viel besser synchronisiert werden als andere Systeme, die im Eventmanagement hängen oder über Messages gesteuert werden. Und, entscheidend: Sie laufen weiter, wenn der Benutzer abgemeldet ist.
Herzlich,
Tom
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Service und GUI

Beitrag von Martin Altmann »

Solang man irgendwo einen eigenen, echten Server stehen hat, mag das gehen!
Sobald aber ein VServer ins Spiel kommt, war es das. Dort gibt es keine angemeldeten Benutzer - nach einem Starten des Servers gibt es auch kein Autologin.

Viele Grüße,
Martin

Tom war schneller und ausführlicher...
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Service und GUI

Beitrag von AUGE_OHR »

Rudolf hat geschrieben:Hab ein globales Flag für den sog Silent Mode bei dem keine der Dialogfunktionen in meiner lib angezeigt wird
meinst du damit eine "Variabel" oder so eine Konstruktion im Source

Code: Alles auswählen

#IFDEF UseGUI
...
#ELSE
...
#ENDIF
anhand des PPO Code kann ich dann schnell raus finden ob ich was übersehen habe.
gruss by OHR
Jimmy
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Service und GUI

Beitrag von Rudolf »

Hallo Jimmy,
ich habe immer eine public DCVARGROUP von eXpress, wenn das Flag gesetzt ist dann wird keine Meldung in meiner ind. Messagebox ausgegeben, kein Progressbar angezeicht etc.
Grüße
Rudolf
Antworten