Autor Beitrag
Mapfel
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 17.05.11 01:24 
Hallo.

Im Verlauf meines Projekts bin ich auf ein Problem gestoßen. Ich habe erfolgreich einen Dienst programmiert, dieser führt seine Tätigkeit auch fehlerfrei aus. Da der Dienst allerdings als ein solcher gestaltet ist, dass er nach einer bestimmten Zeit den Computer herunterfahren soll, soll er ebenfalls möglichst nicht beendet werden können. (Der Nutzer läuft natürlich unter Benutzerrechten nicht unter Administratorrechten)

Daher soll der Dienst sich insgesamt dreimal installieren. Periodisch soll der Dienst nun kontrollieren ob alle weiteren Installationen des Dienstes laufen. (Sie sollten also meinetwegen so installiert werden: Dienstname1, Dienstname2, Dienstname3) Die Abläufe IM Programm selbst habe ich schon vollständig genauso wie die Installation in der Theorie.


Das Problem: Bei der Installation des Dienstes über den Service Control Manager orientiert sich der Dienstname nicht an dem Namen der EXE sondern dem fest im Programm verankerten Namen. Und dieser lässt sich leider nicht während der Installation ändern, genauso wenig wie der ServiceControlManager die Mehrfachinstallation eines Dienstes zulässt.

Da ich bis jetzt alle mir einfallenden Register gezogen habe stehe ich ein wenig auf dem Schlauch. Ich hoffe daher, dass es hier jemanden gibt der mir erklärt wie ich meinen Dienst mehrfach installieren kann oder dieses Problem geschickt umschiffen kann.
(Beachte: Einfach drei ähnlich Dienste zu kompilieren ist nicht möglich, da in dem Fall, dass einer der Dienste gelöscht wird, sich einer der anderen Dienste duplizieren soll und neuinstallieren soll)

Danke schonmal für alle möglichen Antworten

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 17.05.11 07:02 
Hallo und :welcome:

Bei einem Dienst kümmert sich Windows automatisch darum, dass der weiter läuft. Du kannst einstellen ob bei einem Fehler versucht werden soll, den Dienst wiederherzustellen usw.

Beenden kann den Dienst ohnehin niemand, da das mit Benutzerrechten nicht geht. Es geht also ausschließlich um Fehler im Dienst. Und dort kannst du ja zusätzlich schauen, ob du überall eine korrekte und saubere Fehlerbehandlung drin hast.

Mehrmals den selben Dienst installieren ist so erst einmal nicht möglich. Theoretisch sollte es gehen, wenn du in die Interna der Dienstverwaltung selbst eingreifst, statt dies Delphi zu überlassen.

Aber wie gesagt: Ich denke nicht, dass das notwendig ist, wenn der Dienst korrekt konfiguriert wird.
Mapfel Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 17.05.11 10:01 
Es ging auch mehr um eine zusätzliche Sicherung sollte der Nutzer es schaffen die Regelungen von Windows Dienste betreffend umschiffen können oder ähnliches.

In die Interna der Dienstverwaltung eingreifen klingt interessant. Heißt das, man schreibt einige Dienst-Installationsanteile, die normalerweise vom Control Manager übernommen werden selbst?

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 17.05.11 11:26 
user profile iconMapfel hat folgendes geschrieben Zum zitierten Posting springen:
Es ging auch mehr um eine zusätzliche Sicherung sollte
der Nutzer es schaffen die Regelungen von Windows Dienste betreffend umschiffen können
Dann hast du glaube ich noch ganz andere Probleme...
Solange du die UAC auf die höchste Stufe stellst, ist die Wahrscheinlichkeit aber sehr gering, dass das passiert.

user profile iconMapfel hat folgendes geschrieben Zum zitierten Posting springen:
Heißt das, man schreibt einige Dienst-Installationsanteile, die normalerweise
vom Control Manager übernommen werden selbst?
Du musst im Grunde "nur" den Aufruf CreateService in TServiceApplication.RegisterServices in der Unit SvcMgr selbst machen. Wenn du /install in der Projektdatei abfängst und selbst darauf reagierst, könnte das klappen.

Für sinnvoll halte ich es dennoch nicht. :nixweiss:
Mapfel Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 17.05.11 12:09 
Was ich noch vergas zu sagen:
Ich verwende (noch) Windows XP, daher dass Programm ist auch dafür ausgelegt.
Dort gibt es meines Wissens doch noch gar keine UAC?