![]() |
WindowsService und FMX geht das?
Ich habe in meinen Services einen Startparameter SERVICE dann startet die Exe als Dienst...das wirde beim installieren in der Registry angepasst.
Andernfalls startet die Exe als Fensteranwednung.
Delphi-Quellcode:
//in AfterInstall aufrufen von TService aufrufen
Procedure AddServiceStartParamToRegistry(ServiceName:String); var reg:TRegistry; begin reg := TRegistry.Create; try reg.RootKey := HKEY_LOCAL_MACHINE; if reg.OpenKey('SYSTEM\CurrentControlSet\Services\'+ServiceName, True) then begin reg.WriteString('ImagePath', ParamStr(0) + ' /SERVICE '); reg.CloseKey; end; finally reg.Free; end; End; Function CheckWindowedRun:Boolean; Begin Result := ( FindCmdLineSwitch('APP', ['/','-'],true) ) or ( not FindCmdLineSwitch('INSTALL',['/','-'],true) and not FindCmdLineSwitch('UNINSTALL',['/','-'],true) and not FindCmdLineSwitch('SERVICE',['/','-'],true) ); end; Procedure RunWindowed(InstanceClass: TComponentClass; var Reference); Begin if CheckWindowedRun then Begin Vcl.Forms.Application.Initialize; Vcl.Forms.Application.CreateForm(InstanceClass, Reference); Vcl.Forms.Application.Run; Halt(0); End End;
Delphi-Quellcode:
Es waren aber immer VCL Fenster.
programm MY_Programm;
uses Vcl.SvcMgr, Web.WebReq, uMyGUIFrm, (* etc. etc. *) ; begin Randomize; if WebRequestHandler <> nil then WebRequestHandler.WebModuleClass := WebModuleClass; //Ab jetzt kommt das Anwendungsframework RunWindowed(uMyGUIFrm.TMyGUI, uMyGUIFrm.MyGui); if not Application.DelayInitialize or Application.Installing then Application.Initialize; Application.CreateForm(TMy_Service, My_Service); Application.Run; end. Ich würde das ganze auch mit FMX Fenstern machen. Geht das? |
AW: WindowsService und FMX geht das?
Das sollte doch schnell auszuprobieren sein.
|
AW: WindowsService und FMX geht das?
Erstmal ist es sowieso möglich FMX und VCL zu mischen
und dann läuft in deinem Fall doch eh nicht Beides gleichzeitig, also egal. TService baut ja auf der VCL auf, aber normal bekommst du davon nix mit. Warum Halt? Wieso den Code nicht direkt im DPR-Maincode, bzw. warum nicht einen Boolean-Result und bei False den nachfolgenden Code überspringen? PS: ServiceApplication.Run beendet sich ja sofort wieder, wenn die Service-Anwendung nicht als Service gestartet wurde. Drum hab ich mir den Code vom Run nachgebaut und wenn Parameter -DEBUG, erstelle ich ein DummyFenster mit einem Beendenknopf und führe dann den Code meines TService-Klasse aus, um so sen Service einfach debuggen zu können (-DEBUG in den Startparametern des Projekts) Man könnte aber auch zusätzlich/stattdessen auf ![]() |
AW: WindowsService und FMX geht das?
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Das hilft auch beim debuggen. Und ich erspare mir Setups und der Support muss dann nicht erst in den ServiceManager um nachzusehen ob der Dienst da ist und dann in die Konsole um den Dienst zu installieren,... Muss ich Einen Windows Dienst erstellen und dann ein FMX Fenster hinzufügen ? Muss ich evtl die "Projektoptionen->Delphi-Compiler->Unit-Gültigkeitsbereichsnamen" aus einem FMX projekt kopieren? Oder immer alles voll qualifiziert nutzen? Ich benutze diese "UserTools.proj"
Code:
Damit ich mit {$IFDEF Framework_FMX} oder {$IFDEF Framework_VCL} arbeiten kann.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <DCC_Define>FrameWork_$(FrameworkType);$(DCC_Define)</DCC_Define> </PropertyGroup> </Project> Damit das korrekt gesetzt wird muss ich Muss ich vermutlich erst das FMX Projekt starten und dann den Dienst Code im Projekt nachtragen oder? Oder kann ich "FrameworkType" irgendwo in der IDE in den Projektoptionen ändern? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 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