I'm trying to call OpenService with SERVICE_START parameter like below.
void ServiceStart(AnsiString ServiceName)
{
wchar_t lpBuffer[256];
long errorCode;
SERVICE_STATUS_PROCESS ssStatus;
DWORD dwOldCheckPoint;
DWORD dwStartTickCount;
DWORD dwWaitTime;
DWORD dwBytesNeeded;
SC_HANDLE schService;
SC_HANDLE schSCManager;
schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_CONNECT);
if (NULL == schSCManager)
{
errorCode = GetLastError();
FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM, NULL, errorCode,MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), lpBuffer, 256, NULL);
ShowMessage("OpenSCManager failed "+AnsiString(lpBuffer));
return;
}
schService = OpenService(schSCManager,ServiceName.c_str(),SERVICE_START);
if (schService == NULL)
{
errorCode = GetLastError();
FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM, NULL, errorCode,MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), lpBuffer, 256, NULL);
ShowMessage("OpenService failed "+AnsiString(lpBuffer)+" "+IntToStr(errorCode));
CloseServiceHandle(schSCManager);
return;
}
}
OpenService function returnig "Access Denied" message. When run as administrator exe, OpenService function works well.
I also tried with SERVICE_QUERY_STATUS parameter for test.it works fine without administrator
I didn't understand source of problem.
Thanks.