Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Wie (von wo?) wurde ein Programm gestartet? (https://www.delphipraxis.net/51193-wie-von-wo-wurde-ein-programm-gestartet.html)

gbl 8. Aug 2005 07:15


Wie (von wo?) wurde ein Programm gestartet?
 
Ich möchte weiters festellen, wie meine Software gestartet wurde.

Mein Service soll auch als Applikation aufgerufen werden können. Ist ja weiters kein Problem, da es schließlich um eine EXE handelt. Nur wie kann ich feststellen, welche Instanz das Programm aufruft. Der Dienstmanager muß ja schließlich etwas anderes sein als der Commandprompt oder der Explorer? Zur Zeit behelfe ich mich mit einem Aufrufparameter.

Olli 8. Aug 2005 12:39

Re: Wie (von wo?) wurde ein Programm gestartet?
 
Da habe ich doch mal was geschrieben. Guckst du hier:
Delphi-Quellcode:
if IsLocalSystem then
    begin
// SECOND INSTANCE
// Under SYSTEM try to run as a service. This will fail if the app was not
// installed as a service, yet
      ste[0].lpServiceName := pszServiceName;
      ste[0].lpServiceProc := @ServiceMainA;
      ste[1].lpServiceName := nil;
      ste[1].lpServiceProc := nil;
// hand over control to SCM
      StartServiceCtrlDispatcher(ste[0]);
    end
    else
    begin
    // ...
    end;
Download unter (was du brauchst ist der Source von CMDasSYS):
http://assarbad.net/stuff/localsystem.zip / http://assarbad.net/stuff/localsystem.rar

Der Spaß basiert auf der Annahme, daß der Service im Kontext von SYSTEM (LocalSystem) gestartet wird, das Programm selber aber nicht (wenn es also nicht als Service gestartet wurde). Auf dieser Entscheidung basierend wird dann die Kontrolle an den SCM übergeben oder eben die normale Hauptfunktion aufgerufen - zumindest wäre dies bei dir dann wohl so.

Alternativ könntest du dem Service einen Parameter auf den Weg geben, damit das Programm weiß, daß es als Service laufen soll.

gbl 8. Aug 2005 12:58

Re: Wie (von wo?) wurde ein Programm gestartet?
 
Hi,

Danke für Deine Mühe.

Zitat:

Der Spaß basiert auf der Annahme, daß der Service im Kontext von SYSTEM (LocalSystem) gestartet wird
Genau damit habe ich ein (Einstellungs) Problem.
Es muß doch möglich sein die Aufrufende Instanz zu ermittlen (Parent-Handle)?

Ich habe das mit dem Notes-Dominoserver gesehen.

Nun ich will nicht "tschentschen". Der Workarrount über den Switch gefällt mir ganz gut.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 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