关于win2000中的服务启动停止问题:
    如何编程实现查询SNMP服务的目前状态?
    如何编程实现启动SNMP服务,停止SNMP服务?我的程序调试结果是
   当我调用StartService的时候,程序返回"Service start pending“;
   也就是startService成功了,但是我看服务的当前状态(ssStatus.dwCurrentState)仍然是停止状态,因而程序运行到while循环的时候,也就没有进入循环。
   为什么我的startService返回的服务状态不是SERVICE_START_PENDING,仍然是 SERVICE_STOPPED                0x00000001????
   那位大虾能帮我解决这个问题阿?多谢了,老板催名阿
下面是我编写的代码,当启动服务的时候总是不能正常启动。
能否帮我看看代码    
     /*
     *检测设备自动发现接口服务SNMP Service是否安装
     */
    schSCManager = OpenSCManager( 
                   NULL,                    // local machine 
                   NULL,                    // ServicesActive database 
                   SC_MANAGER_ALL_ACCESS);  // full access rights 
    if (schSCManager == NULL) 
        // this should never happens
             fprintf(stderr,"OpenSCManager error"); 
    schService = OpenService( 
    schSCManager,           // SCManager database 
"SNMP",           // name of service 
SERVICE_ALL_ACCESS);  // need QUERY access 
    if (schService == NULL) {
        time(&timer);
        tm = localtime(&timer);
        fprintf(stderr,"%.4d-%.2d-%.2d %.2d:%.2d:%.2d 设备自动发现接口服务SNMP Service没有安装!请先安装该服务,设备自动发现接口才能正常启动.\n",
 tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
          tm->tm_hour, tm->tm_min, tm->tm_sec); 
    }else{
/*
 *检测设备自动发现接口服务SNMP Service是否启动,如果没有启动则启动
 */
        if (!QueryServiceStatus( 
            schService,   // handle to service 
            &ssStatus) )  // address of status information structure
{
   time(&timer);
            tm = localtime(&timer);
            fprintf(stderr,"%.4d-%.2d-%.2d %.2d:%.2d:%.2d 查询设备自动发现接口SNMP服务状态信息出错.\n",tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
                            tm->tm_hour, tm->tm_min, tm->tm_sec);
}
if (ssStatus.dwCurrentState == SERVICE_RUNNING ) {
//服务已经启动
time(&timer);
                  tm = localtime(&timer);
fprintf(stderr,"%.4d-%.2d-%.2d %.2d:%.2d:%.2d 设备自动发现接口服务SNMP Service已经启动.\n",
tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
                  tm->tm_hour, tm->tm_min, tm->tm_sec);
}else{
   //服务没有启动,尝试启动服务
            if (!StartService(
                   schService,  // handle to service 
                   0,           // number of arguments 
                   NULL) )      // no arguments 

fprintf(stderr,"StartService Error\n"); 
}else{
fprintf(stderr,"Service start pending.\n"); 
}

// 检查服务状态,直到服务不再开始Pending. 
if (!QueryServiceStatus( 
            schService,   // handle to service 
    &ssStatus) )  // address of status information structure
{
fprintf(stderr,"QueryServiceStatus"); 
}
           // Save the tick count and initial checkpoint.
dwStartTickCount = GetTickCount();
dwOldCheckPoint = ssStatus.dwCheckPoint;
            while (ssStatus.dwCurrentState == SERVICE_START_PENDING) 
{  
// Do not wait longer than the wait hint. A good interval is 
// one tenth the wait hint, but no less than 1 second and no 
// more than 10 seconds. 
dwWaitTime = ssStatus.dwWaitHint / 10;
if( dwWaitTime < 1000 )
dwWaitTime = 1000;
else if ( dwWaitTime > 10000 )
dwWaitTime = 10000;
Sleep( dwWaitTime );
// Check the status again. 
if (!QueryServiceStatus( 
    schService,   // handle to service 
&ssStatus) )  // address of structure
break; 
if ( ssStatus.dwCheckPoint > dwOldCheckPoint )
{
// The service is making progress.
dwStartTickCount = GetTickCount();
dwOldCheckPoint = ssStatus.dwCheckPoint;
}
else
{
if(GetTickCount()-dwStartTickCount > ssStatus.dwWaitHint)
{
// No progress made within the wait hint
break;
}
}
}//end while  

if (ssStatus.dwCurrentState == SERVICE_RUNNING) 
{
printf("StartService SUCCESS.\n"); 
dwStatus = NO_ERROR;
}
else 

printf("\nService not started. \n");
printf("  Current State: %d\n", ssStatus.dwCurrentState); 
printf("  Exit Code: %d\n", ssStatus.dwWin32ExitCode); 
printf("  Service Specific Exit Code: %d\n", 
ssStatus.dwServiceSpecificExitCode); 
printf("  Check Point: %d\n", ssStatus.dwCheckPoint); 
printf("  Wait Hint: %d\n", ssStatus.dwWaitHint);
dwStatus = GetLastError();

CloseServiceHandle(schService); 
}
}