![]() |
Delphi-Programm als Dienst
Hallo,
ich habe ein Delphi-Programm, das ich als Dienst laufen lassen möchte. Es hat soweit alles geklappt, ich habe eine Service-Application erzeugt, die entsprechenden Units in das Projekt eingebunden und compiliert. Den Dienst habe ich dann mit name /install eingerichtet - hat auch geklappt. Im Taskmanager sehe ich auch mein Programm als Prozess laufen.Ich kann den Dienst auch starten und beenden, aber jetzt kommt mein Problem: Das Programm besteht aus einem Formular form1, das auch angezeigt werden soll und das wird es leider nicht. Wie kann ich das Formular mit dem Start des Dienstes auch sichtbar werden lassen ? Danke Günther Käberich |
Re: Delphi-Programm als Dienst
Hallo gkaeberich,
Dein Dienst muss interaktiv mit Desktop arbeiten dürfen. Also doppelklick auf dem Dienst und das Häckchen bei 'Anmelden-> Datenaustausch zwischen Dienst und Desktop zulassen' setzen. |
Re: Delphi-Programm als Dienst
So müsste es eigentlich gehen:
Delphi-Quellcode:
var
MyForm: TForm1; procedure TService1.ServiceStart(Sender: TService; var Started: Boolean); begin Application.CreateForm(TForm1, MyForm); MyForm.Show; end; procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean); begin MyForm.Free; end; |
Re: Delphi-Programm als Dienst
Hallo,
vielen Dank für den Code, aber ich weiß nicht so genau, wo ich den platzieren soll - mein Programm heißt project und hat eine unit1
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs; type TService1 = class(TService) private { Private-Deklarationen } public function GetServiceController: TServiceController; override; { Public-Deklarationen } end; var Service1: TService1; implementation uses abgleich_Unit; {$R *.DFM} procedure ServiceController(CtrlCode: DWord); stdcall; begin Service1.Controller(CtrlCode); end; function TService1.GetServiceController: TServiceController; begin Result := ServiceController; end; end. Der Rest ist in der unit abgleich_unit mit dem Formular form1, Wo also setze ich den beschriebenen Code ein ? Danke Günther [edit=thomasdrewermann]Delphitags eingebaut Mfg, thomasdrewermann[/edit] |
Re: Delphi-Programm als Dienst
Also, erstmal, verwende das [delphi]-Tag. Dadurch wird der Code um einiges lesbarer. Du musst nur die Ereignisse ServiceStart und ServiceStop implementieren, das geht über den Objektinspektor.
|
Re: Delphi-Programm als Dienst
Hallo,
sorry wegen des fehlenden Delphi-Tags. Die beiden Ereignisprozeduren hatte ich schon vorher ausprobiert, aber ohne Erfolg. Der dort hineingesetzte Code führt jetzt beim Starten des Dienstes dazu, das eine Meldung erscheint, der Dienst würde gestartet aber sofort wieder angehalten - mein Programmfenster Programms erscheint nicht. Günther |
Re: Delphi-Programm als Dienst
Ja, ich werde mir das Problem mal ansehen, ich hab zur Zeit aber nicht viel Zeit...vielleicht weiß jemand anderes noch eine Lösung..
|
Re: Delphi-Programm als Dienst
Alle schimpfen sie über die Sicherheitslücken in Windows, habe aber keinen Skrupel selbst welche nachträglich einzubauen. :mrgreen: Jeder interaktive Dienst bedeutet eine neue Sicherheitslücke im System. Selbst MS rät davon ab interaktive Dienste zu nutzen.
Was hast du denn vor? Warum muss dein Dienst interaktiv sein und was ist, wenn kein Benutzer angemeldet ist? Oder ein Benutzer mit weniger Rechrten? |
Re: Delphi-Programm als Dienst
Hallo,
mein Programm überwacht in einem festgelegten Zeitrythmus, ob in einer bestimmten Datei eine Änderung durch einen Benutzer durchgeführt wurde und kopiert dann einige Daten zu einem anderen Verzeichnis, wo ein Programm liegt, das diese Daten immer möglichst aktuell benötigt. Die Aktionen meines Programms werden protokolliert und ich möchte gerne in einer Listbox die Aktivitäten beobachten, diese speichern oder löschen. Das das Programm auf einem Server laufen soll, an dem normalerweise kein User angemeldet ist, kenne ich nur die Möglichkeit, dieses als Dienst im Systemkonto laufen zu lassen. Günther |
Re: Delphi-Programm als Dienst
Dann lass den Dienst eine Protokolldatei schreiben, die du mit einer GUI Anwendung auslist und anzeigst.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:29 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