![]() |
AW: Wie startet Firefox seinen Update Service?
Zitat:
|
AW: Wie startet Firefox seinen Update Service?
hab zurzeit diese rechte auf dem Service
Laut SC SDSHOW MyUpdateService
Code:
mit
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)
Code:
erweitere ich die rechte sinnvoll am besten direkt nach installation des service....wegen der uac.
sc sdset MyUpdateService D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWP;;;IU)
geht sowas im batch
Code:
naja auf jedenfall lässt sich der dienst jetzt auch ohne rechte starten
SC SDSHOW MyUpdateService > tempfile.txt
type tempfile.txt | echo (A;;RPWP;;;IU)>tempfile.txt type tempfile.txt > SC SDSET MyUpdateService |
AW: Wie startet Firefox seinen Update Service?
Nur mal nebenbei eine kleine Beobachtung von mir, als reiner Anwender (falls es dem TE lediglich um "ich will aber wissen wie es funktioniert" geht, bitte ignorieren):
<Rant> Firefox läuft bei mir den ganzen Tag. Wenn es mal ein Update gibt, sagt er mir das, und auch, daß ich ihn neu starten muß damit es durchgeführt werden kann. In meinem Anwendungsfall (und ich vermute ich bin nicht der Einzige, der so "arbeitet") hat der Dienst nichts zu tun, was nicht der Browser von sich aus auch machen könnte. Andere Software setzt das auch ohne Dienst um, beim Start wird geprüft, ob es eine neuere Version gibt und gefragt, ob das jetzt installiert werden soll oder später oder eben gar nicht. Prominente Beispiele dafür sind paint.net und Notepad++. Die Entwickler dieser Produkte sind sicherlich nicht zu blöd, einen Update-Dienst zu entwickeln, aber es hat auch Vorteile, wenn man das die Anwendung selbst machen läßt, und auch den Benutzer mit einbezieht:
</Rant> Aber zum lernen, wie so ein Dienst funktioniert und installiert wird, ist das sicher eine tolle Gelegenheit. Dem Endanwender würde ich es dennoch nicht zumuten wollen. Sherlock |
AW: Wie startet Firefox seinen Update Service?
Der Dienst sorgt dafür, dass das Update von jedem Benutzer ausgeführt werden kann.
|
AW: Wie startet Firefox seinen Update Service?
Ja der Dienst "konserviert" halt die UAC-Abfrage und hat System Rechte. Und Ich will einfach vermeiden jedesmal die IT Abteilung bemühen zu müssen.
Die Software die dort ein Update erfährt wird oft aktualisiert, da sie diverse Instanzen einer Mobilen App verwaltet Die Apps aus dem Playstore/Applestore aktualisieren sich ja eigenständig, so dass man Aktualisierungen der Software nicht Kunde für Kunde ausrollen kann.... |
AW: Wie startet Firefox seinen Update Service?
Ich muss quasi diesen C# code in das AfterInstall Event vom dienst bringen denke ich.
Code:
Sähe dann so aus
wchar_t sddl[] = L"D:"
L"(A;;CCLCSWRPWPDTLOCRRC;;;SY)" // default permissions for local system L"(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)" // default permissions for administrators L"(A;;CCLCSWLOCRRC;;;AU)" // default permissions for authenticated users L"(A;;CCLCSWRPWPDTLOCRRC;;;PU)" // default permissions for power users L"(A;;RP;;;IU)" // added permission: start service for interactive users ; PSECURITY_DESCRIPTOR sd; if (!ConvertStringSecurityDescriptorToSecurityDescriptor(sddl, SDDL_REVISION_1, &sd, NULL)) { fail(); } if (!SetServiceObjectSecurity(service, DACL_SECURITY_INFORMATION, sd)) { fail(); }
Delphi-Quellcode:
Falls mal jemand sowas braucht. Es ist getestet und funktioniertinterface ...... function ConvertStringSecurityDescriptorToSecurityDescriptorA(StringSecurityDescriptor: LPCSTR; StringSDRevision: DWORD; var SecurityDescriptor: PSECURITY_DESCRIPTOR; SecurityDescriptorSize: PULONG): BOOL; stdcall; {$EXTERNALSYM ConvertStringSecurityDescriptorToSecurityDescriptorA} function ConvertStringSecurityDescriptorToSecurityDescriptorW(StringSecurityDescriptor: LPCWSTR; StringSDRevision: DWORD; var SecurityDescriptor: PSECURITY_DESCRIPTOR; SecurityDescriptorSize: PULONG): BOOL; stdcall; {$EXTERNALSYM ConvertStringSecurityDescriptorToSecurityDescriptorW} function ConvertStringSecurityDescriptorToSecurityDescriptor(StringSecurityDescriptor: LPCTSTR; StringSDRevision: DWORD; var SecurityDescriptor: PSECURITY_DESCRIPTOR; SecurityDescriptorSize: PULONG): BOOL; stdcall; {$EXTERNALSYM ConvertStringSecurityDescriptorToSecurityDescriptor} .... implementation .... const advapi32 = 'advapi32.dll'; {$IFDEF UNICODE} AWSuffix = 'W'; {$ELSE} AWSuffix = 'A'; {$ENDIF UNICODE} function ConvertStringSecurityDescriptorToSecurityDescriptorA; external advapi32 name 'ConvertStringSecurityDescriptorToSecurityDescriptorA'; function ConvertStringSecurityDescriptorToSecurityDescriptorW; external advapi32 name 'ConvertStringSecurityDescriptorToSecurityDescriptorW'; function ConvertStringSecurityDescriptorToSecurityDescriptor; external advapi32 name 'ConvertStringSecurityDescriptorToSecurityDescriptor' + AWSuffix; procedure TMyUpdateService.ServiceAfterInstall(Sender: TService); var SA: TSecurityAttributes; Permission:String; SvcMgr,SvcHandle: SC_HANDLE; ServiceName:String; begin Permission := 'D:' + '(A;;CCLCSWRPWPDTLOCRRC;;;SY)' + // default permissions for local system '(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)' + // default permissions for administrators '(A;;CCLCSWLOCRRC;;;AU)' + // default permissions for authenticated users '(A;;CCLCSWRPWPDTLOCRRC;;;PU)' + // default permissions for power users '(A;;RP;;;IU)'; // added permission: start service for interactive users SA.nLength := SizeOf(SA); SA.bInheritHandle := True; if not ConvertStringSecurityDescriptorToSecurityDescriptor(PWideChar(Permission), 1, SA.lpSecurityDescriptor, nil ) then RaiseLastOSError; {$IF DEFINED(CLR)} SvcMgr := OpenSCManager('', nil, SC_MANAGER_ALL_ACCESS); {$ELSE} SvcMgr := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS); {$ENDIF} if SvcMgr = 0 then RaiseLastOSError; try ServiceName :=self.Name; SvcHandle := OpenService(SvcMgr, PWidechar(ServiceName) , SERVICE_ALL_ACCESS); if SvcHandle = 0 then RaiseLastOSError; try SetServiceObjectSecurity(SVCHandle,DACL_SECURITY_INFORMATION,SA.lpSecurityDescriptor); finally CloseServiceHandle(SvcHandle); end; finally CloseServiceHandle(SvcMgr); end; LocalFree(HLOCAL(SA.lpSecurityDescriptor)); end; Mit RUNAS und UAC Elevation den Service installieren und dann einfach bei Bedarf mit userrechten starten... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:50 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-2025 by Thomas Breitkreuz