![]() |
AW: Windows-Dienst, Notification, Zugriff verweigert
Zitat:
Wie sieht eine solche Methode aus?
Delphi-Quellcode:
Procedure ShowMessageInAllInteractiveSessions(aMessage:String);
Begin // was muss hier hin damit ein Dienst auf allen interaktiven Sesssions den Messagetext anzeigen kann? end; |
AW: Windows-Dienst, Notification, Zugriff verweigert
Zitat:
Der Installer der mit admin rechten läuft (oder eine Erststart der mit Admin rechten läuft) setzt dann den ACL(SDDL) des Dienstes so, dass unprivilegierte Benutzer ihn starten können.
Delphi-Quellcode:
// der erste ist der SD den der Dienst normalerweise hat wenn man ihn nicht anpasst.
//ACL (SDDL ) SECURITY_DESCRIPTOR_STANDARD = '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;;CCDCLCSWRPWPDTLOCRSDRC;;;BU)'+ // Built IN Users '(A;;RP;;;IU)'; // added permission: start service for interactive users SECURITY_DESCRIPTOR_ALLOW_START_BY_USER = 'D:' + '(A;;CCLCSWRPWPDTLOCRRC;;;SY)' + // default permissions for local system '(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)' + // default permissions for built-in administrators '(A;;CCLCSWRPLOCRRC;;;IU)'+ // permissions for interactively logged-on user von MozillaMaintainance und ChromeElevation '(A;;CCLCSWRPLOCRRC;;;SU)'+ // permissions for service logon user von MozillaMaintainance und ChromeElevation '(A;;CCDCLCSWRPWPDTLOCRSDRC;;;BU)'+ // permissions for built-in users '(A;;CCLCSWRPLOCRRC;;;AU)' + // default permissions for authenticated users '(A;;CCLCSWRPWPDTLOCRRCRP;;;PU)'; // default permissions for power users 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 SetServiceSecurityDescriptor(ServiceName,Permission:String);// in ServiceAfterInstall ausführen da hat man immer Admin Rechte. var SA: TSecurityAttributes; SvcMgr,SvcHandle: SC_HANDLE; Begin SA.nLength := SizeOf(SA); SA.bInheritHandle := True; if not ConvertStringSecurityDescriptorToSecurityDescriptor(PWideChar(Permission), 1, SA.lpSecurityDescriptor, nil ) then RaiseLastOSError; {$IF DEFINED(CLR)} //A.R. CLR = Common Language Runtime = .NET SvcMgr := OpenSCManager('', nil, SC_MANAGER_ALL_ACCESS); {$ELSE} SvcMgr := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS); {$ENDIF} if SvcMgr = 0 then RaiseLastOSError; try 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; Eine ander Möglichkeit Rechte zu konservieren ist es einen Geplantentask im Taskscheduler zu hinterlegen. Das wollte ich in zukunft mal versuchen... habe es aber bisher noch nie ausgerollt...nur damit experimentiert. |
AW: Windows-Dienst, Notification, Zugriff verweigert
@QuickAndDirty: Danke für den Hinweis.
Inzwischen habe ich allerdings entschieden, ganz auf Windows-Dienste zu verzichten. Die Update-Kontrolle wird von einer unsichtbare Kontroll-App erledigt werden, die im Hintergrund arbeitet. Das Programm wir über ein Monitor-Programm gesteuert werden, wobei der Anwender u.a. einstellen kann, dass sich die Kontroll-App. nach dem Ende einer Überprüfung selbst beendet. Damit können überflüssige Ressourcen vermieden werden. Der Anwender muss lediglich sicherstellen, dass die Kontroll-App im Autostart oder im Task Scheduler eingetragen ist, wobei es am besten ist, wenn der Update-Monitor die entsprechenden Einstellungen vornehmen kann. Dies muss ich allerdings erst noch ausknobeln. Der Anwender wird die Update-Kontrolle über ein InnoSetup installieren müssen und dort sollten auch die benötigte Rechte abgehandelt werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 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