Entwickler-Ecke

Windows API - Programm als Service einrichten


Rool - So 02.03.03 20:56
Titel: Programm als Service einrichten
Wie richtet man ein Programm als Service ein? Ich hab XP aber keine Ahnung wie DAS geht!!


bis11 - So 02.03.03 20:59

Mit SRVANY.EXE. Oder Du schreibst einen Service selber.


maxk - So 02.03.03 21:08

Ich glaub mich tritt ein Esel - das scheint ja auch unter Delphi 6 Personal zu klappen :mrgreen:

maxk


Rool - So 02.03.03 22:09
Titel: uups...
jo, danke vielmals. das mit dem titel war n versehen. ich wollte eigentlich ne antwort auf einen alten eintrag erstellen, hab aber ausversehen auf "neues Thema" gedrückt.
Also nix für ungut ;-))


Rool - Mo 03.03.03 11:23
Titel: problem...
Ich muss sagen, ich habe absolut keine Ahnung von Services, ich will nur das eine bestimmte exe läuft (vollbild), und man soll weder Strg+Alt+Entf drücken können (oder da soll ne passwort-abfrage kommen...) noch die WinTaste. Ausserdem sollte das Programm alleine starten, wenn man reset drückt!
Jetzt habe ich diesesn Code von Delphi-Source aber kann gar nix damit anfangen.
Könnt ihr mir sagen was ich machen muss?


Delete - Mo 03.03.03 11:40

Was für ein Betriebssystem? Öhm, Moment mal "Service"? Also NT-basierend.
1. Taskmanger so gut wie nicht deaktivierbar
2. Haben diese Betriebssysteme schon ein Login
3. Ein Service mit GUI habe ich noch nicht gesehen.
4. Ein Service ist schon etwas heavy, wenn man es verstehen will, also nichts für Leute die gerade 3 Monate mit Delphi arbeiten und noch nie was von der Win32API gehört haben.


Rool - Mo 03.03.03 12:47
Titel: naja...
OS: WinXP

Also zu den API Kenntnissen kann ich nur sagen:
Ich habe über 4 Jahre mit VB geproggt... Da kennt man die Api irgendwann schon ganz gut.

Ich hab nicht das Problem mit dem Code, sonder ich weis ehrlich gesagt gar nicht richtig was ein service macht!!! Ich will nur die schon beschriebenen Probleme beheben... (Taskmanager... er kann ja meinetwegen erscheien aber dann doch bitte mit Passwort-Abfrage...)


Delete - Mo 03.03.03 13:00
Titel: Re: naja...
Rool hat folgendes geschrieben:
OS: WinXP

Also zu den API Kenntnissen kann ich nur sagen:
Ich habe über 4 Jahre mit VB geproggt... Da kennt man die Api irgendwann schon ganz gut.

War nicht unbedingt auf dich bezogen.
Zitat:

Ich hab nicht das Problem mit dem Code, sonder ich weis ehrlich gesagt gar nicht richtig was ein service macht!!!

Nicht was er macht, sondern was er ist, ist die entscheidene Frage.
Service sind bei Multiusersystem ganz praktisch. Zum Beispiel ein Viren-Sacnner. Wird er erst gestartet, wenn sich jemand eingeloggt hat, kann der jenige ihn abschalten, da er in seinem Benutzer-Kontext läuft, was ja nun nicht unbedingt erwünscht ist. Ein Service wird vor dem Login gestartet und läuft so auf dem System-Konto, so das eine normaler Benutzer ohne Admin-rechte nicht die Rechte hat in zu beenden, weil er nicht auf seinem Konto läuft.
[/quote]
Zitat:

Ich will nur die schon beschriebenen Probleme beheben... (Taskmanager... er kann ja meinetwegen erscheien aber dann doch bitte mit Passwort-Abfrage...)

Ich sehe da kein Problem, weil es für ein NT-basierendes System keinen Sinn macht.
Aber den Taskmanger mit PW-Abfrage aufrufen?!? :shock: Das wird ja immer besser. :roll:


Klabautermann - Mo 03.03.03 13:01

Hallo,
Luckie hat folgendes geschrieben:
3. Ein Service mit GUI habe ich noch nicht gesehen.

das ist soviel ich weis auch per definition nicht gestattet. Ein Service läuft unsichtbar im Hintergrund.

Gruß
Klabautermann


Delete - Mo 03.03.03 13:05

Das einzigste was geht, sind Messageboxen, aber die brauchen einen bestimmten Flag zusätzlich.


maxk - Mo 03.03.03 13:11

Zitat:
Ich glaub mich tritt ein Esel - das scheint ja auch unter Delphi 6 Personal zu klappen :mrgreen:

Nein du bist ein Esel, die Dateien service.pas und consolehlp.pas gibt es doch gar nicht unter Delphi 6 Personal. Aber vielleicht weiß ja jemand, wo man legal eine Kopie oder eine Nachprogrammierung downloaden kann.


Rool - Mo 03.03.03 13:35
Titel: mmm
Also ich glaube wir verstehen uns miss!

Du hasst mal in dem anderen Eintrag gesagt:

Wenn dein Programm nicht beendet werden darf, dann komzipiere es als Service unter 2000/XP. Die darf nur der Admin einrichten, starten und beenden.

Ich habe ein Prog laufen. Dieses Programm soll im Vollbild als einziges sichtbares Programm laufen. Jeder der an den Rechner geht darf das Programm bedienen, aber nicht beenden. Man soll also nicht auf den Rechner zugreifen. In Win98 war das kein Problem. (SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, nil, 0)

Besser wärs noch, wenn man auf reset drückt, das dann beim neustart NUR dieses Programm startet (Windows im Hintergrund...).

Ich dachte so etwas wär mit nem Service möglich aber vielleicht hab ich mich ja getäuscht.
Achja... falls es jemand kennt: BPM-Studio macht so etwas. Nennt sich dann Exklusive Shell-Anwendung...


Delete - Mo 03.03.03 13:42

Ein Service kann aber kein GUI haben und du willst eine GUI, also fällt ein Service für dich flach.


Rool - Mo 03.03.03 14:01
Titel: ja...
Ja.. ok, das ist wenigstens ne konkrete Antwort. Gibt es sonst irgendeine Möglichkeit so etwas zu machen?


FriFra - Mo 03.03.03 16:15

Ein Service kann sehr wohl eine GUI haben! Man muss nur die Interaktion mit dem Desktop zulassen...

Ich habe mal ein Programm geschrieben, welches im Prinzip jedes andere Programm als Service starten kann. die Einrichtung erfolgt hier auch vollständig über eine GUI:
http://www.frifra.de [http://www.frifra.de/Informatik/index.php?MainItem=2&SubItem=4#1]


Motzi - Mo 03.03.03 16:24

Die Fenster von Services befinden sich in einer eigenen Window-Station und sind daher nicht auf dem normalen Windows-Desktop verfügbar. Es gibt jedoch auch Möglichkeiten mit denen ein Service mit dem Benutzer auf der (Standard)WindowStation WinSta0 interagieren kann...!

PS: in der nächsten version meines X-Spy (http://www.x-spy.net) gibt es auch die Möglichkeit Window-Stations und Desktops aufzulisten.


Rool - Mo 03.03.03 18:16
Titel: ...
Ist es denn dadurch möglich mein Problem zu lösen?


MSCH - Di 04.03.03 22:23
Titel: Grübel
So,
erstens dürfen Dienste selbstverständlich eine GUI haben, die Frage ist eher warum sie das haben. I.d.R. nur zu Konfigurations- und Kommunikationszwecken. Auch können Sie Dialoge und Messages anzeigen. Virenscanner arbeiten teilweise so.
Zweitens kann man sehr wohl den Taskmanager ausblenden. Krasse Möglichkeit: Taskman.exe löschen, oder noch krasser einen Dienst schreiben der jedesmal wenn dieser Task läuft ihn killt. Da gibts bereits einschlägige Literatur in punkto Viren und Backdoors.

Schreib doch einfach einen Dienst der Deine Anwendung aufruft. Noch simpler, schau dich mal in der registry um.

Ein Service unter delphi ist relativ simple; es gibt da verschiedene Vorlagen (TService...). Wichtig ist nur, das dein Service Thread-sicher sein sollte (--> Threads)

Grüße
MSCH


Delete - Di 04.03.03 22:31
Titel: Re: Grübel
MSCH hat folgendes geschrieben:
So,
erstens dürfen Dienste selbstverständlich eine GUI haben, die Frage ist eher warum sie das haben. I.d.R. nur zu Konfigurations- und Kommunikationszwecken.

Sicher? Ich denke um die GUI, die du bei einem Virenscanner siehst, wohl eher eine zweite Anwendung ist. Um ein Fenster zu haben, bräuchte ein Service eine normale Message-Loop und eine Fensterprozedur. Beide sind aber, soweit ich weiß, in einem Service nicht vorhanden.
Zitat:

Auch können Sie Dialoge und Messages anzeigen.

Es hat auch niemand etwas anderes behauptet.


Motzi - Mi 05.03.03 10:25
Titel: Re: Grübel
Luckie hat folgendes geschrieben:
MSCH hat folgendes geschrieben:
So,
erstens dürfen Dienste selbstverständlich eine GUI haben, die Frage ist eher warum sie das haben. I.d.R. nur zu Konfigurations- und Kommunikationszwecken.

Sicher? Ich denke um die GUI, die du bei einem Virenscanner siehst, wohl eher eine zweite Anwendung ist. Um ein Fenster zu haben, bräuchte ein Service eine normale Message-Loop und eine Fensterprozedur. Beide sind aber, soweit ich weiß, in einem Service nicht vorhanden.
Zitat:

Auch können Sie Dialoge und Messages anzeigen.

Es hat auch niemand etwas anderes behauptet.


Wie gesagt.. Services sind einer anderen Window-Station zugeordnet. Die normale (Standard) WindowStation ist WinSta0. Das ist die einzige WindowStation die Benutzereingaben empfangen kann und daher auch die einzige für die es Sinn macht Fenster sichtbar angezuzeigen. Außerdem ist ein Fenster-Handle immer nur in seiner WindowStation gültig.
Services laufen nicht auf dieser WindowStation sondern haben ihre eigene. Ergo können sie auch keine Fenster/Messages/Dialoge anzeigen (zumindest nicht einfach so... es geht über ein bisschen Hintergrundwissen)

Services laufen in der System-LogonSession und haben damit dieselben Rechte wie das System (sie laufen damit in den Rängen des TCB). Wenn ein Prozess nun einen neuen Prozess startet, so erbt der neue Prozess die LogonSession des Mutterprozesses. dh. startet ein Services einen neuen Prozess, so läuft dieser ebenfalls in der LogonSession, allerdings kann dieser Prozess der WinSta0 WindowStation angehören und somit auch Fenster/Messages/Dialoge anzeigen.


MSCH - Mi 05.03.03 21:41
Titel: Re: Grübel
Au weia, da funktioniert mein Dienst ja garnicht, ups, und der läuft produktiv. Kann aber gerne mal den Quelltext hier posten.

Was ist eine :?: Windows-Station :?: ? Hmmm, Grübel :? . Bitte mal um Aufklärung.
CU
MSCH

Zitat:
Wie gesagt.. Services sind einer anderen Window-Station zugeordnet. Die normale (Standard) WindowStation ist WinSta0. Das ist die einzige WindowStation die Benutzereingaben empfangen kann und daher auch die einzige für die es Sinn macht Fenster sichtbar angezuzeigen. Außerdem ist ein Fenster-Handle immer nur in seiner WindowStation gültig.
Services laufen nicht auf dieser WindowStation sondern haben ihre eigene. Ergo können sie auch keine Fenster/Messages/Dialoge anzeigen (zumindest nicht einfach so... es geht über ein bisschen Hintergrundwissen)


Motzi - Mi 05.03.03 22:04
Titel: Re: Grübel
MSCH hat folgendes geschrieben:
Au weia, da funktioniert mein Dienst ja garnicht, ups, und der läuft produktiv.

Wie darf ich das verstehen? Hast du einen Service programmiert?

Zitat:
Was ist eine :?: Windows-Station :?: ? Hmmm, Grübel :? . Bitte mal um Aufklärung.
CU
MSCH

Hier http://ntsec.inet-one.com/dir.1999-02/msg00028.html findest du mal eine ungefähre Beschreibung von WindowStations und Desktops. Im SDK hab ich nicht wirklich eine Beschreibung gefunden was eine WindowStation nun eigentlich ist, aber du kannst ja mal googln.