![]() |
Wie startet Firefox seinen Update Service?
Hallo, ich habe mir einen Update Service geschrieben.
Wie bei FF soll der nicht die ganze Zeit laufen sondern einfach nur wenn er gebraucht wird. Nun bekomme ich den Service ohne Admin privilegien nicht gestartet. openService meldet "Access Denied" Wie macht FF das mit seinem Update Service? |
AW: Wie startet Firefox seinen Update Service?
Könnte man ihn eventuell in die Aufgabenplanung eintragen, damit er alle 7 Tagen sich startet und nach Updates guckt?
|
AW: Wie startet Firefox seinen Update Service?
Weiß nicht, wie er das genau macht. Worauf Du aber vielleicht hinaus willst:
Bei der FF Installation wird gefragt, ob automatisch nach Updates gesucht werden soll (oder sogar explizit nach diesem Service gefragt) Sagt man nein, passiert natürlich nichts. Sagt man ja, gibt es eine UAC Abfrage und das Setup erlangt Admin Rechte, mit deren Hilfe es sicher den Service einrichtet, also auch dem Service selbst das Recht (weiter)gibt. (So ungefähr aus dem Kopf, das Spiel ist prinzipbedingt immer sehr ähnlich) |
AW: Wie startet Firefox seinen Update Service?
Ja ich weiß. Mein Service läuft ja auch als "System" Service und er wurde mit "RUNAS" installiert.
|
AW: Wie startet Firefox seinen Update Service?
Hat irgendwer schon mal den FireFox bei einem Update genau beobachtet?
Was ist Euch da aufgefallen? Eben, nix! Der fragt für die Installation noch nicht mal nach dem Administrator-Zugang trotz UAC. Und warum? Weil die Installation von dem MozillaMaintenance Service durchgeführt wird. Dieser Dienst läuft im Kontext von Lokales System und darf somit auch installieren. Dieser Dienst ist aber im Normal-Zustand beendet und wird nur dann erweckt, wenn es ein Update gibt. Genau darum geht es hier in diesem Thread. Wie weckt Otto-Normal-User den Service auf, damit dieser mit seinen höheren Rechten die Installation vollzieht. Ich habe es gerade mal ausprobiert und das geht mit
Code:
(auch als Otto-Normal-User).
net start MoziallaMaintenance
|
AW: Wie startet Firefox seinen Update Service?
Zitat:
Ich weiß nur nicht WIE? Der Mozilla Update Service läuft, wie mein Service, im "System" Benutzerkontext. Der FF läuft als Benutzer. Wie startet FF den Dienst? |
AW: Wie startet Firefox seinen Update Service?
Zitat:
Liegts daran das OpenService einen Zugang zu allerlei Anderem liefert, neben der Möglichkeit den Service zu starten? ich gucke gerade vielleicht nehme ich mir mit den flags hier einfach zuviel heraus und man muss sich selbst in den anforderungen beschneiden damit es klapt?
Delphi-Quellcode:
hServiceManager := OpenSCManager(nil, nil, SC_MANAGER_CONNECT);
if hServiceManager > 0 then begin GetLastError; hService := OpenService(hServiceManager, PChar(ServiceName), SERVICE_START); err := GetLastError; if ERR >0 then Begin {$IFDEF FrameWork_VCL} Showmessage(SysErrorMessage(GetLastError)); {$ENDIF} {$IFDEF FrameWork_FMX} TDialogService.Showmessage(SysErrorMessage(GetLastError)); {$ENDIF} End; |
AW: Wie startet Firefox seinen Update Service?
Probier es mal mit
![]() |
AW: Wie startet Firefox seinen Update Service?
Kann es sein, dass er den service beim windows start hoch fährt, dieser nach einem update schaut und wnen nichts da ist, der service sich einfach beendet ?
(Hab kein FF, von daher nur theorie) |
AW: Wie startet Firefox seinen Update Service?
hab das versuch, geht leider nicht.
Aber wieso sollte es funktionieren wenn ich start und Query rechte anfordere... das ist zurzeit die funktion.
Delphi-Quellcode:
Vermutlich ist der fehler, dass ich den Service mit Shellexecute installiere...
function TServiceController.StartService(ServiceName : string) : TServiceStatusReturn;
var hService : SC_HANDLE; hServiceManager : SC_HANDLE; pDummy : PChar; Tries : Integer; err:Cardinal; begin Result := ServiceGetStatus(nil,PChar(ServiceName)); if Result <> ssrStopped then Exit; // SetServiceObjectSecurity() // vermutlich hServiceManager := OpenSCManager(nil, nil, SC_MANAGER_CONNECT ); if hServiceManager > 0 then begin GetLastError; hService := OpenService(hServiceManager, PChar(ServiceName), SERVICE_START); Err := getlasterror; if ERR >0 then Begin {$IFDEF FrameWork_VCL} Showmessage(SysErrorMessage(GetLastError)); {$ENDIF} {$IFDEF FrameWork_FMX} TDialogService.Showmessage(SysErrorMessage(GetLastError)); {$ENDIF} End; if hService > 0 then begin pDummy := nil; if winsvc.StartService(hService, 0, pDummy) then begin Tries := 5; repeat Sleep(10000); Result := ServiceGetStatus(nil,pchar(ServiceName)); Dec(Tries); until (Tries = 0) or (Result = ssrRunning); end else begin Result := ssrError; end; CloseServiceHandle(hService); end end; CloseServiceHandle(hServiceManager); end; Wenn ich den Service auch über den ServiceManager installieren würde könnte ich die via UAC Angeforderten rechte nutzen um diese funktion SetServiceObjectSecurity()auszuführen. hmm |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 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 by Thomas Breitkreuz