Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Dienst aus Konsolenprogramm (https://www.delphipraxis.net/152168-dienst-aus-konsolenprogramm.html)

franktron 14. Jun 2010 08:50


Dienst aus Konsolenprogramm
 
Ich habe ein Konsolenprogramm und möchte jetzt eine Dienst daraus machen.

Wie mache ich das

SirThornberry 14. Jun 2010 08:54

AW: Dienst aus Konsolenprogramm
 
Für erstens gibt es keine pauschale Lösung. Dein Konsolenprogramm wartet sicher auf Eingaben, das ist beim Dienst so nicht möglich da dieser im Hintergrund aggiert, auch wenn kein Benutzer angemeldet ist.

Für 2tens: Eröffne dazu bitte ein eigenes Thema. Bei uns gilt pro Thema nur eine Frage da sonst am Ende keiner mehr weiß welche Antwort zu welcher Frage gehört und auch andere mit gleichem Problem später über die Suche nur schwer, die hoffentlich hier gepostete, Lösung finden. Zudem hat es den Vorteil das du für jede Frage auch einen aussagekräftigen Titel wählen kannst so das man Anhand des Titels schon die Frage erahnen kann.

Klaus01 14. Jun 2010 09:10

AW: Dienst aus Konsolenprogramm
 
[OT]
@franktron
kleine Korrektur Deiner Signatur.
Delphi-Quellcode:
While not Tux.Satt do
  begin
    Fisch:=TFisch.Create;
    Tux.Essen(Fisch);
    Fisch.Free;
  end;
Dem Fisch ist es egal von wem er gefressen wird.
Daher sollte TuxEssenFisch keine Methode des Fisches sein.
:wink:
[/OT]

Grüße
Klaus

franktron 14. Jun 2010 09:15

AW: Dienst aus Konsolenprogramm
 
Mein Programm ist ein Application Server also es hat keine Ausgabe (außer logfile)
und TCP/IP

kuba 14. Jun 2010 10:26

AW: Dienst aus Konsolenprogramm
 
Zitat:

Zitat von franktron (Beitrag 1028674)
Mein Programm ist ein Application Server also es hat keine Ausgabe (außer logfile)
und TCP/IP

Hy,

kannst du dein Programm nicht einfach aus einem Dienst heraus aufrufen ??

ungefähr so:

Delphi-Quellcode:
repeat
     if not IsExeRunning(MeinProgramm) then
     begin
       FillChar(StartupInfo,Sizeof(StartupInfo),#0);
       StartupInfo.cb:=Sizeof(StartupInfo);
       StartupInfo.dwFlags:=STARTF_USESHOWWINDOW;
       StartupInfo.wShowWindow:=SW_SHOWNORMAL; //SW_SHOW, SW_HIDE, SW_SHOWNORMAL;
       lstrcpy(szCmd, PChar(MeinProgramm));
       if CreateProcess(nil, szCmd, nil, nil, False, CREATE_NEW_CONSOLE, nil,
       nil, StartupInfo, ProcessInfo) then begin
       CloseHandle(ProcessInfo.hThread);
       CloseHandle(ProcessInfo.hProcess);
     end;
until stopped
Ich hab auch ein TCP/IP Programm für den Datenaustausch mit einem Service. Das Programm starte ich einfach wie oben gezeigt aus dem Dienst heraus. Bis Windows XP ist das vollkommen unproblematisch. Ab Vista geht es auch, allerdings müssen einige Punkte beachtet werden, sonst erscheint die Meldung "Erkennung interaktiver Dienste" in der Taskleiste.

kuba


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz