只能发送消息过去,由那边响应消息启动。

解决方案 »

  1.   

    BOOL CNTService::StartServer(CString strMachineName,CString strServiceName)
    {
        SERVICE_STATUS ssStatus;     DWORD dwOldCheckPoint; 
        DWORD dwStartTickCount;
        DWORD dwWaitTime;    SC_HANDLE schSCManager;      
        SC_HANDLE schService;         BOOL bRet = TRUE;    schSCManager = OpenSCManager(        
    (LPCTSTR)strMachineName,        
    SERVICES_ACTIVE_DATABASE,        
    SC_MANAGER_CREATE_SERVICE 
    );                      if (schSCManager) 
    {
    schService = OpenService( 
    schSCManager,                    
    (LPCTSTR)strServiceName,          
    SERVICE_ALL_ACCESS);  if (schService) 
    {
    if (!StartService(schService, 0, NULL) )
    {
    DWORD dwError = GetLastError();
    if (dwError != ERROR_SERVICE_ALREADY_RUNNING)
    {
    DisplayErrorText (dwError);
    bRet = FALSE;
    }
    }
     
    if (!QueryServiceStatus( schService, &ssStatus) )  
    {
    DWORD dwError = GetLastError();
    DisplayErrorText (dwError);
    bRet = FALSE;
    }
     
    dwStartTickCount = GetTickCount();
    dwOldCheckPoint = ssStatus.dwCheckPoint; while (ssStatus.dwCurrentState == SERVICE_START_PENDING) 

    dwWaitTime = ssStatus.dwWaitHint / 10; if( dwWaitTime < 1000 )
    dwWaitTime = 1000;
    else if ( dwWaitTime > 10000 )
    dwWaitTime = 10000; Sleep( dwWaitTime ); if (!QueryServiceStatus( schService, &ssStatus) )  
    break; 
     
    if ( ssStatus.dwCheckPoint > dwOldCheckPoint )
    {
    dwStartTickCount = GetTickCount();
    dwOldCheckPoint = ssStatus.dwCheckPoint;
    }
    else
    {
    if(GetTickCount()-dwStartTickCount > ssStatus.dwWaitHint)
    break;
    }
    }  if (ssStatus.dwCurrentState == SERVICE_RUNNING) bRet = TRUE; CloseServiceHandle(schService); 
    }
    else

    DWORD dwError = GetLastError();
    DisplayErrorText (dwError);
    bRet = FALSE;
    } CloseServiceHandle(schSCManager); 
    }
    else
    {
    DWORD dwError = GetLastError();
    DisplayErrorText(dwError);
            bRet = FALSE; 
    }        return bRet;
    }