Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Service oder Anwendung (https://www.delphipraxis.net/95698-service-oder-anwendung.html)

Kowelenz 11. Jul 2007 18:33


Service oder Anwendung
 
Hallo zusammen,

ich habe eine Funktion die in einer eigenen Unit liegt, welche per uses in mehreren Programmen eingebunden wird.
Die Funktion müsste jetzt irgendwie ermitteln, ob das Programm in welche sie eingebunden ist eine normale Anwendung oder ein Dienst ist. Gibts dafür irgend eine Property von Application oder wie kann man das rausfinden? Oder was bietet die Windows API da für Möglichkeiten?
Jemand ne idee?


Danke,
der Kowelenzer

marabu 11. Jul 2007 19:23

Re: Service oder Anwendung
 
Herzlich willkommen in der Delphi-PRAXiS, Kowelenz.

Du könntest einfach den Typ von Application abfragen:

Delphi-Quellcode:
if Application is TServiceApplication then
  ShowMessage('Wir sind Service')
else
  ShowMessage(Application.ClassName);
Freundliche Grüße vom marabu

SirThornberry 11. Jul 2007 19:46

Re: Service oder Anwendung
 
aber die Globale Application ist doch erst verfügbar wenn man die Unit Forms einbindet oder das äquivalent für den Service. Und sobald die Unit Forms eingebunden wird, dächte ich, wird auch das TApplication was man aus der normalen Anwendung kennt instanziert.

GuenterS 11. Jul 2007 20:24

Re: Service oder Anwendung
 
Zitat:

Zitat von SirThornberry
aber die Globale Application ist doch erst verfügbar wenn man die Unit Forms einbindet oder das äquivalent für den Service. Und sobald die Unit Forms eingebunden wird, dächte ich, wird auch das TApplication was man aus der normalen Anwendung kennt instanziert.


Äh ja und was ist an Marabus Vorschlag jetzt das Problem? Er wirt wohl die eine oder andere Unit eingebunden haben

SirThornberry 11. Jul 2007 20:28

Re: Service oder Anwendung
 
eben, wenn meine annahme stimmt, hängt das Ergebnis davon ab welche Unit in der Unit wo der Test ist stattfindet.

GuenterS 11. Jul 2007 20:32

Re: Service oder Anwendung
 
Zitat:

Zitat von Delphi Hilfe
Fügen Sie einem Projekt nur eine der Unit Forms, Cgiapp, Isapiapp, Svcmgr oder Ctlpanel hinzu. Wenn die Ausführung eines Programms beginnt, wird die Variable Application so instantiiert, wie sie in der betreffenden Unit-Datei deklariert ist, und ruft deren Methoden Initialize, CreateForm und Run auf. Das Verhalten der Anwendung ist von der Implementierung dieser Methoden in der Klasse des erstellten Anwendungsobjekts abhängig.

Das würde doch bedeuten, dass man es beim Ausführen dieser Funktion weiß, wenn man sich an oben genannten Ratschlag der Online Hilfe hält.

SirThornberry 11. Jul 2007 20:42

Re: Service oder Anwendung
 
@GuenterS: Eben, das würde funktionieren wenn er in seinem Hauptprogramm wo eine der Units eingebunden ist das ganze prüft. Aber er hat ja folgende Situation:

Unit1: Unit mit Funktion welche überprüfen soll ob es ein Service ist oder nicht
Unit2: Hauptprogramm-> bindet Unit1 ein wo funktion ist welche feststellt ob es ein service ist oder nicht

in Unit1 ist "Application" aber nur verfügbar wenn es per uses eingefügt ist. Und da ist eben die Frage welche Unit in die Uses soll. Sobald die Unit Forms in Unit1 eingebunden wird ist es immer eine normale Anwendung obwohl in der Hauptunit eventuell ein Service steckt.

Wenn die Prüfung direkt in Unit2 statt finden würde wäre es also kein Problem. Aber dadurch das in Unit1 die Funktion sein soll welche prüft kommt es eben zu genanntem problem.

marabu 11. Jul 2007 21:15

Re: Service oder Anwendung
 
Ach, es ist alles noch viel schlimmer: Wird SvcMgr eingebunden, dann existieren sogar zwei Application-Objekte. Vergesst meinen Vorschlag, er war nicht sehr durchdacht. Wenn ihr bis morgen früh keine Lösung findet, dann denke ich nochmal drüber nach.

Gute Nacht

gsh 11. Jul 2007 22:11

Re: Service oder Anwendung
 
Hmm einfach mal so in die runde geworfen:
Vllt. bringen dir Compiler schalter was

Da kannst du dann in etwa so schreiben:
Delphi-Quellcode:
Programm:
{$Define Ich_bin_ein_Programm}

Service:
{$Define Ich_bin_ein_Service}

Deine Unit:
procedure SagMirWasDuBist;
begin
{$IFDEF Ich_bin_ein_Programm}
  ShowMessage("Bin ein Programm");
{$ENDIF}
{$IFDEF Ich_bin_ein_Service}
  ShowMessage("Bin ein Service");
{$ENDIF}
end;
Ich bin totmüde also kann ich dir jetzt nicht mehr genau sagen wie die dinger heißen aber Forum suche Hier im Forum suchenCompilerschalter oder in der Delphi Hilfe findest du des alles ganz genau

Gut nacht *umfall*

Kowelenz 12. Jul 2007 07:41

Re: Service oder Anwendung
 
Hallo und Danke dass ihr euch so reinhängt!


Zu den Compilerschaltern, gute Idee, aber:

Wenn ich {$Define Ich_bin_ein_Programm} in der Hauptunit mache und in der Funktionsunit das {$IFDEF Ich_bin_ein_Programm}, dann ist es dort nicht definiert. Das funktioniert bei mir nur, wenn ich das define innerhalb der selben Unit mache. Auch das Definieren in der dpr-Datei hat keinen Erfolg gebracht...

Grüße,
der Kowelenzer


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:20 Uhr.
Seite 1 von 2  1 2      

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