我在写了一个服务程序,安装后它处于自动启动状态,如何用程序将服务启动而不用手工去启动此服务程序?请高手指教!

解决方案 »

  1.   

    OpenSCManager(...)
    OpenService(...)
    StartService(...)
    ControlService(...)
      

  2.   

    BOOL CNleApp::ResetService()
    {
    SC_HANDLE s_Manager;
    SC_HANDLE s_Handle;
    SERVICE_STATUS  status;
    BOOL bOK = FALSE; s_Manager = ::OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
    if (s_Manager == NULL)
    return 0;
    s_Handle = ::OpenService(s_Manager,_T("ServiceName"),SERVICE_ALL_ACCESS);
    if (s_Handle == NULL)
    {
    ::CloseServiceHandle(s_Manager);
    return 0;
    }
    if (ControlService(s_Handle,SERVICE_CONTROL_STOP, &status))
    {
    Sleep(status.dwWaitHint);
    const TCHAR* str = _T("DigiCtrl");
    if (::StartService(s_Handle,1,&str))
    {
    ::QueryServiceStatus(s_Handle, &status);
    Sleep(status.dwWaitHint);
    bOK = TRUE;
    }
    }
    ::CloseServiceHandle(s_Handle);
    ::CloseServiceHandle(s_Manager);
    if (!bOK)
    return 0;
    return TRUE;
    }
      

  3.   

    SC_HANDLE   schService;
        SC_HANDLE   schSCManager;
    SERVICE_STATUS          ssStatus;   
    CString ErrMsg;
        TCHAR szPath[512]="c:\\service\\ReplServer.exe";
        schSCManager = OpenSCManager(
                            NULL,                   // machine (NULL == local)
                            NULL,                   // database (NULL == default)
                            SC_MANAGER_ALL_ACCESS   // access required
                            );
        if ( schSCManager )
    {
    schService = OpenService( 
            schSCManager,          // SCM database 
            TEXT(SZSERVICENAME),    // service name
            SERVICE_ALL_ACCESS); 
    Sleep(3000);
    if (schService == NULL) 
            {
    ErrMsg="";
    ErrMsg=ErrMsg+"OpenService failed -"+GetLastErrorText(szErr, 256);
                ::AfxMessageBox(ErrMsg);
            }
    if (!QueryServiceStatus( 
                schService,   // handle to service 
                &ssStatus) )  // address of status information
               ::AfxMessageBox(GetLastErrorText(szErr, 256));  
    if (ssStatus.dwCurrentState != SERVICE_RUNNING)
    {
    m_TrayIcon.SetIcon(IDI_STOP);
    if(!StartService(schService,0,NULL))
    ::AfxMessageBox(GetLastErrorText(szErr, 256)); 
    else
    m_TrayIcon.SetIcon(IDI_START);
    }
    else
    m_TrayIcon.SetIcon(IDI_START);

    CloseServiceHandle(schService);
    CloseServiceHandle(schSCManager);
     }