![]() |
Service als Konsolenanwendung vor Login
Hallo zusammen,
also ich hab je schon vor ein paar Monaten was mit Serviceanwendungen gemacht und damals hieß es, dass es sehr kritisch ist wenn ich Formulare usw. anzeigen lasse. ist das bei Konsolenanwendungen genauso kritisch? Welche Einschränkungen habe ich bei Konsolen gegenüber Formularanwendungen, ausser der Optik? MfG Angel4585 |
Re: Service als Konsolenanwendung vor Login
Genau das selbe. Die Konsole wird auf dem Desktop vom Service angezeigt und der liegt in der WindowsStation des Services und die ist eben nicht die selbe wie die des Loginprozesses bzw. des interaktiven Benutzers.
|
Re: Service als Konsolenanwendung vor Login
Und wie bekomme ich dann am besten eine Anzeige hin? :gruebel:
Konsole und Formulare sind ja schonmal ausgeschlossen wenn ich das richtig vertehe. |
Re: Service als Konsolenanwendung vor Login
Du baust eine zweite Anwendung, welche dann über Messages (welche Art auch immer Du willst) kommuniziert und so die wichtigen Daten austauscht.
...:cat:... |
Re: Service als Konsolenanwendung vor Login
ja aber ne Anzeige bekomm ich ja trotzdem nicht hin oder?
Sinnn ist folgender: Eine Serveranwendung, die auch wenn man nicht eingeloggt ist Daten abgleicht, um zu sehen was abgeglichen wird brauche ich eine Anzeige, auch VOR dem Login. Wenn ich ne zweite Anwendung baue die aufgerufen wird, wird die aber erst NACH dem Login angezeigt. Edit: Wäre es möglich aus dem Dienst heraus mit Canvas zu zeichnen und so ne Anzeige hinzubekommen? |
Re: Service als Konsolenanwendung vor Login
Zitat:
Du könntest mit ![]() |
Re: Service als Konsolenanwendung vor Login
Luckie hat eigentlich schon die Lösung gepostet. Du musst mit Hilfe von SwitchDesktop einen Thread in einen anderen Desktop bringen und dort kannst du dann das neue Fenster erstellen.
|
Re: Service als Konsolenanwendung vor Login
So einfach ist es nicht. Er muss nicht nur auf einen anderen Desktop, sondern wahrscheinlich auch in eine andere WindowsStation. Nur den Desktop wechseln ist kein Problem:
![]() |
Re: Service als Konsolenanwendung vor Login
zum wechseln der WindowStations gibt es auch die entsprechenden Befehle. Aber einfach ist es wahrlich nicht. Jedoch denke ich auch das es nicht unmöglich ist wenn man es wirklich will und sich damit auseinander setzt.
Werd mich wenn ich zeit hab auch mal damit befassen einfach um zu sehen ob es vielleicht doch unmöglich ist. Das Hauptproblem welches ich sehe ist ein VCL-Formular in einem anderen Thread laufen zu lassen. Es wird wohl darauf hinaus laufen dass, das form welches beim login sichtbar sein soll auf nonvcl-basis läuft. |
Re: Service als Konsolenanwendung vor Login
@Luckie:
Also diese Switch Desktop geschichte ist ja krass, aber irgendwie wird bei mir diese MessageBox nicht angezeigt. Und das aus einen ganz normalen Programm. Muss ich da irgendwas beachten damit das angezeigt wird? :gruebel: |
Re: Service als Konsolenanwendung vor Login
LOL, bei mir auch nicht und habe mich somit selber ausgesperrt. :mrgreen:
In einer Konsolenanwendung het es aber. Muss ich mir mal angucken. |
Re: Service als Konsolenanwendung vor Login
Also ich bin auf Abmelden, dann hat der Debugger gefragt ob ich beenden will und dann auf abbrechen, dann war ich wieder zurück auf dem alten Desktop :stupid:
Edit: hab jetzt mal versucht aus der Konsole raus en Formular anzuzeigen und da hab ich mich auch wieder ausgesperrt.. ohne gehts aber. Was ist en ner MessageBox anders als an einem Formular? Edit2: Also das Problem scheint die Unit "Forms" zu sein, sobald ich diese einbinde schliess ich mich aus... :( Edit3: Also ich kann jetzt mit Canvas auf diesen zweiten Desktop zeichnen, aber könnte ich diesen zweiten Desktop nicht vielleicht auch irgendwie als eine Art Fenster auf dem ersten Desktop anzeigen lassen? |
Re: Service als Konsolenanwendung vor Login
Also theoretisch müsste doch, wenn ich auf den zweiten Desktop switche und dann mit Shellexecute ein Programm starte, dieses Programm auf ddiesem zweiten Desktop zu sehen sein, oder?
Auf jedenfall geschieht das nicht. Das programm wird auf dem ersten Desktop angezeigt... :( Edit: Also ich hab jetzt mal den "Ernstfall" getestet: Ein Dienst(TService) welcher den Desktop switcht und mit Canvas darauf die Uhrzeit anzeigt. Funktioniert NICHT. Er switcht zwar den Desktop und wartet die 20 Sekunden, aber das Canvas wird nicht gezeichnet, hier der Code:
Delphi-Quellcode:
Was muss ich ändern?
procedure TTestServerDienst.BaitAndSwitchDesktop;
var OldDesk : HDESK; NewDesk : HDESK; Canvas : TCanvas; DC : HDC; begin OldDesk := GetThreadDesktop(GetCurrentThreadID); NewDesk := CreateDesktop(PChar('Foobar'), nil, nil, 0, DESKTOP_CREATEWINDOW or DESKTOP_SWITCHDESKTOP or DESKTOP_CREATEMENU, nil); if NewDesk <> 0 then begin SetThreadDesktop(NewDesk); Windows.SwitchDesktop(NewDesk); //DrawPicture('E:\Bild_2.bmp'); ATestTime:=IncSecond(Now,20); try Canvas := TCanvas.Create(); try try Canvas.Handle := DC; with canvas.Font do begin Size:=96; Color:=clRed; end; while (ATestTime > Now)and not Terminated do Canvas.TextOut(100,800,DateTimetoStr(ATestTime)); except end; finally Canvas.Free; end; finally ReleaseDC(0, DC); end; Windows.SwitchDesktop(OldDesk); SetThreadDesktop(OldDesk); CloseDesktop(NewDesk); end; CloseDesktop(OldDesk); end; {******************************************************************************} procedure TTestServerDienst.ServiceExecute(Sender: TService); begin ATestTime:=IncMinute(Now,2); while (ATestTime>Now)and not terminated do BaitAndSwitchDesktop; end; |
Re: Service als Konsolenanwendung vor Login
Also ich schaff es jetzt zumindest vor dem Login mit Canvas auf den neuen Desktop zu zeichnen, das problem ist jetzt nur, dass der alte Desktop nichtmehr zurück kommt.. heisst: Ich kann mich nichtmehr einloggen.. nurnoch übern abgesicherten Modus.
|
Re: Service als Konsolenanwendung vor Login
also das beschriebene problem mit den Desktops hab ich bisher nur beobachtet wenn der Desktop nicht richtig geöffnet wurde. Du kannst ja mal meinen Desktopswitch probieren ob der richtig zwischen den Desktops hinn und her springt. Wenn der richtig funktioniert liegt es eindeutig daran das der Zieldesktop nicht mit genügend Zugriffsrechten geöffnet wurde.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz