我尝试使用OpenService参数调用SERVICE_START,如下所示。
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函数返回"访问被拒绝"信息。 以管理员exe身份运行时,OpenService功能运行良好。
我还尝试使用SERVICE_QUERY_STATUS参数进行测试。无需管理员即可正常工作
我没有理解问题的根源。
感谢。