Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Wie startet Firefox seinen Update Service? (https://www.delphipraxis.net/197914-wie-startet-firefox-seinen-update-service.html)

QuickAndDirty 18. Sep 2018 13:48

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?

Luckie 18. Sep 2018 14:50

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?

jobo 18. Sep 2018 14:54

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)

QuickAndDirty 18. Sep 2018 15:05

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.

Schokohase 18. Sep 2018 15:07

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:
net start MoziallaMaintenance
(auch als Otto-Normal-User).

QuickAndDirty 18. Sep 2018 15:07

AW: Wie startet Firefox seinen Update Service?
 
Zitat:

Zitat von Luckie (Beitrag 1413489)
Könnte man ihn eventuell in die Aufgabenplanung eintragen, damit er alle 7 Tagen sich startet und nach Updates guckt?

Denke das ginge, aber ich dachte immer, dass FF den Service bei Bedarf startet.
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?

QuickAndDirty 18. Sep 2018 15:21

AW: Wie startet Firefox seinen Update Service?
 
Zitat:

Zitat von Schokohase (Beitrag 1413493)
Ich habe es gerade mal ausprobiert und das geht mit
Code:
net start MoziallaMaintenance
(auch als Otto-Normal-User).

Hm...Ich weiß es ist etwas bitchy aber warum geht das nicht mit mit dem Servicemanager von windows...?
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;

Schokohase 18. Sep 2018 15:47

AW: Wie startet Firefox seinen Update Service?
 
Probier es mal mit https://stackoverflow.com/a/30514865/1744164 (da musst du minimal noch Hand anlegen damit es läuft)

MyRealName 18. Sep 2018 16:12

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)

QuickAndDirty 18. Sep 2018 16:19

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:
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;
Vermutlich ist der fehler, dass ich den Service mit Shellexecute installiere...
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 09:00 Uhr.
Seite 1 von 2  1 2      

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