Dienst aktualisieren
Hallo Leute,
ich hätte nochmal eine Frage in Bezug auf einen Dienst... Was ist die beste (am einfachsten für den Kunden) Möglichkeit einen TService (TServiceApplication) zu updaten?? Wie macht man das normalerweise (wenn möglich voll automatisch)? Vielen Dank |
Re: Dienst aktualisieren
Dienst beenden
File ersetzten Dienst starten Fertig Allerdings ja keinen Namen im Dienst ändern Gruss wo |
Re: Dienst aktualisieren
OK, das hört sich relativ logisch an.
Nun die eintscheidenten Punkte: -die neue Version ist in einem Netzwerkverzeichnis -die alte Version soll automatisch aktualisiert werden -der Dienst existiert lokal im Windows-Verzeichnis Jetzt die Problematik, auf die ich gestoßen bin: Ich kann den Dienst als User "Netzwerkdienst" laufen lassen, somit hat dieser dann Rechte um auf den UNC Pfad zuzugreifen. Der Dienst kopiert einen Updater (dazu später mehr) und die neue Version auf das Verzeichnis C:\. Er startet jetzt den Updater. Der Updater soll jetzt den Dienst beenden die Exe ersetzen und wieder starten. Problem ist, dass der Updater vom Dienst geerbt hat und somit auch unter "Netzwerkdienst" läuft und dadurch nicht auf das Win-Verzeichnis zugreifen kann. Ich habe jetzt auch schon versucht den Updater unter einen anderen Benutzer laufen zu lassen, aber das geht anscheinend auch nicht. (Versucht wurde "System") Welche Möglichkeit gibt es noch? Wie gesagt, gefordert ist: -Die neue Version vom Dienst taucht irgendwann mal in einem Netzwerkverzeichnis auf -Dies soll er merken und sich selbst Updaten -Und zuguter letzt, der Dienst kann außerdem auf mehreren Rechnern laufen. Vielen Dank! |
Re: Dienst aktualisieren
Hallo,
per Batch könntest Du das so lösen, Dein Updater müsste halt diese Batch aufrufen.
Code:
@ECHO OFF
net stop DienstName net use \\rechnername\freigegebenesVerzeichnis\ /user:Domaene\Benutzername kennwort copy \\rechnername\freigegebenesVerzeichnis\Dienst.exe c:\Support\Dienst.Exe net use \\rechnername\freigegebenesVerzeichnis\ /delete net start DienstName Zitat:
Wir haben unsere Dienste... alle in einem Supportverzeichnis liegen und halten sie so getrennt von den windowseigenen Programmen. Auf das Supportverzeichnis können wird die Rechte so vergeben, wie es für unsere Aufgaben geeignet erscheint. |
Re: Dienst aktualisieren
Jop,
und wie soll dann diese Batch aufgerufen werden? Das Update soll ja automatisch anlaufen!! Zitat:
Dort liegen alle Computerspezifischen Einstellungen des Programms... Danke schonmal! |
Re: Dienst aktualisieren
Hallo,
die Batch kann Dein Updater aufrufen. Das was die Batchdatei macht, müsste eigentlich auch alles über die Windows-API zu erledigen sein, da kann ich die aber nicht sagen, was mit welcher Funktion zu realisieren ist. |
Re: Dienst aktualisieren
Ja, aber die Batchdatei wird ja wiederum mit den Rechten von "Netzwerkdienst" aufgerufen und kann nicht in das Windowsverzeichnis zugreifen!
|
Re: Dienst aktualisieren
Hallo,
Zitat:
Das wollen wir dann doch mal lieber schnell abstellen: Mache auf das Verzeichnis des Dienstes eine Freigabe, z. B.: DienstName$. Durch das $ am Ende wird es eine versteckte Freigabe, die im Explorer nicht zu sehen ist.
Code:
Über die "Eleganz" dieser Lösung wollen wir uns lieber nicht streiten :wink:
@ECHO OFF
net stop DienstName :REM Laufwerksverbindung mit Anmeldung an "Fileserver" net use \\rechnername\freigegebenesVerzeichnis\ /user:Domaene\Benutzername kennwort :REM Laufwerksverbindung auf uns selbst mit anderer Anmeldung net use \\%COMPUTERNAME%\LokaleFreigabe$ /user:Domaene\Benutzername kennwort copy \\rechnername\freigegebenesVerzeichnis\Dienst.exe \\%COMPUTERNAME%\LokaleFreigabe$\Dienst.Exe net use \\rechnername\freigegebenesVerzeichnis\ /delete net use \\%COMPUTERNAME%\ObenGenannteFreigabe$ /delete net start DienstName Ansonsten schau bitte mal, ob Du mit CreateProcess nicht weiter kommst. |
Re: Dienst aktualisieren
Man kann doch den Dienst gar nicht über "Netzwerk" installieren (bzw. starten) oder?
Als ich das vor ein paar Tagen probiert hab, ging es jedenfalls nicht wirklich... :gruebel: Vielen Dank! |
Re: Dienst aktualisieren
Hallo,
Zitat:
Dann müsstest Du wohl probieren, über Deinen Updater mit CreateProcess einen weiteren Prozess zu starten, dem beim Start die entsprechenden Benutzerrechte mitgegeben werden. |
Re: Dienst aktualisieren
Ne,
ich meinte, dass man einen Dienst nicht mit einem Netzwerkpfad installieren kann. Der dienst wird zwar installiert, man kann ihn aber nicht starten! (Soweit ich das probiert hab) Mit CreateProcess bzw. CreateProcessAsUser mit LogonUser davor hab ichs auch schon versucht, aber das funzt ja auch nicht. Gibts denn keine andere Lösung? Dankä! |
Re: Dienst aktualisieren
Hallo,
Zitat:
|
Re: Dienst aktualisieren
Zitat:
Ist ja auch logisch, weil Dienste ja auch starten können (müssen) wenn gerade mal kein Netzwerk da ist. Der Dienst befindet sich indem das Verzeichnis aus dem der Dienst installiert wird. Gruss wo |
Re: Dienst aktualisieren
Guten Morgen.
Also ist das schon mal nicht ganz so optimal mit den Netzwerkpfaden... Aber wie könnte man so etwas sonst lösen? Irgendeine Möglichkeit muss es doch geben um einen Dienst sauber, selbstständig und sicher zu aktualisieren, auch im Netzwerk?! Danke! |
Re: Dienst aktualisieren
Dienst schaut alle x sekunden nach ob es ein update gibt (z.B. webseite, netzwerk etc.)
wenn es eine neue version gibt. Updater starten updater beendet dienst kopiert neue datei startet den dienst das müste eigentlich eine sinvolle Lösung sein, oder? |
Re: Dienst aktualisieren
Zitat:
Wenn der Dienst unter dem Konto Netzwerkdienst läuft kann er zwar das neue Update vom Netzwerk lesen aber das Konto Netzwerkdienst hat standardmäßig eben keine Rechte um im Windowsverzeichnis das update zu plazieren. Meiner Meinung nach gibt es keine Möglichkeit unter Verwendung eines Kontos was entweder nur Rechte für das eine oder nur Rechte für das andere hat. Du braucht entweder ein Konto was für beides die Rechte hat oder du musst eben die Berechtigungen anpassen. Ich weiß nicht um was für einen Dienst es sich genau handelt und ob es erlaubt ist das dieser nicht läuft wenn das Netzwerk nicht erreichbar ist. Ich würde (wenn der Dienst nicht zwangsläufig immer laufen muss sondern nur wenn Netzwerk vorhanden ist) die gesamte Logic des Dienstes in eine DLL auslagern und diese vom Dienst laden lassen. Dadurch kann der Dienst die Logic aktuallisieren ohne sich selbst beenden zu müssen und es bleibt die Möglichkeit das die Logic auf dem Letzlaufwerk liegen bleiben kann. Sozusagen kann der Dienst dann schauen welches die aktuellste DLL im Netzwerkpfad ist und diese Laden. Kommt eine aktuellere hinzu lädt er diese. |
Re: Dienst aktualisieren
Zitat:
Zitat:
Man installiert den Dienst auf C:\windows\meinProgramm und bei der Freigabe meinProgramm$ kannste den Dienst kopieren und wieder starten. |
Re: Dienst aktualisieren
Muss der Dienst eigentlich mit dem Netzwerkdienste-User laufen :?:
Du kannst ja auch den Dienst unter dem System laufen lassen und bei der Freigabe in den Sicherheitseinstellungen die Computer bzw. eine Computergruppe den Zugriff gewähren. Somit kannst Du auf den UNC-Pfad zugreifen und auf das Windows Verzeichnis. |
Re: Dienst aktualisieren
Der Dienst muss mit dem Netzwerkdienstuser laufen damit er Zugriff/Berechtigungen auf Netzwerkressourcen hat :-)
|
Re: Dienst aktualisieren
Muss nicht. Ich habe Dienste mit System Rechten laufen, die auch auf Netzwerkresourcen zugreifen können. Wir haben hier Windows XP mit Server 2003 im Einsatz und unsere Dienste können ohne Probleme auf die Resourcen zugreifen. Wie bereits erwähnt, muss man bei den Resource definieren welche Computer bzw. Computergruppen Zugriff haben dürfen. Liegt wahrscheinlich da dran, dass jeder PC auch seinen eigenen Account in der Domäne hat.
MfG |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:29 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