Entwickler-Ecke
Windows API - Den selben Dienst mehrfach installieren
Mapfel - Di 17.05.11 01:24
Titel: Den selben Dienst mehrfach installieren
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
Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
jaenicke - 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 - 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
Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
jaenicke - Di 17.05.11 11:26
Mapfel hat folgendes geschrieben : |
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.
Mapfel hat folgendes geschrieben : |
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 - 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?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!