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