难道就没有一个对编server程序较熟悉的么
我是完全按照步骤做过来的,现在我业安装好了这个server,可就是启动时回抱错
最惨的是我在ServiceThread线程中把我的代码换做,最简单的发“嘟嘟嘟”声的代码,却可以
成功,请高手帮助啊!!!!

解决方案 »

  1.   

    ServiceThread线程是什么线程,执行什么功能?
    出现这个错误是因为你没有及时地向服务管理器报告你的服务的状态。
      

  2.   

    ServiceThread函数包含有该服务真正要做的工作
    应该不回是没有及时报告服务状态,因为,我在ServiceThread里放入最简单的代码,比如发声,
    就可以正确执行啊,所以,应该不是你说的问题!
    加入发声的代码如下:
    DWORD ServiceThread(LPDWORD param)
    {
    while (1)
    {
    Beep(200,200);
    Sleep(beepDelay);}
    return 0;
    }// Initializes the service by starting its thread
    BOOL InitService()
    {
    DWORD id;
    // Start the service's thread
    threadHandle = CreateThread(0, 0,
    (LPTHREAD_START_ROUTINE) ServiceThread,
    0, 0, &id(;
    if (threadHandle==0)
    return FALSE;
    else
    {
    runningService = TRUE;}
    }
    VOID ServiceMain(DWORD argc, LPTSTR *argv) 
    {
    BOOL success;
    // immediately call Registration function
    serviceStatusHandle=
    RegisterServiceCtrlHandler(
    SERVICE_NAME, (LPHANDLER_FUNCTION)Handler);
    if (!serviceStatusHandle) {terminate(GetLastError()); return;}// Notify SCM of progress
    success=SendStatusToSCM(SERVICE_START_PENDING,
    NO_ERROR, 0, 1, 5000);//设置scm状态标志
    if (!success) {terminate(GetLastError()); return;}// create the termination event
    terminateEvent = CreateEvent (0, TRUE, FALSE, 0);
    if (!terminateEvent) {terminate(GetLastError()); return;}// Notify SCM of progress
    success = SendStatusToSCM(SERVICE_START_PENDING,
    NO_ERROR, 0, 2, 1000);//周期增长的为2
    if (!success) {terminate(GetLastError()); return;}// Check for startup params
    if (argc==2){
    int temp=atoi(argv[1]);
    if (temp<1000)
    beepDelay=DEFAULT_BEEP_DELAY;
    else
    beepDelay =temp;
    }// Notify SCM of progress
    success=SendStatusToSCM(SERVICE_START_PENDING,
    NO_ERROR, 0, 3, 5000);
    if (!success) {terminate(GetLastError()); return;}// Start the service itself
    success=InitService();
    if (!success) {terminate(GetLastError()); return;}// The service is now running. 
    // Notify SCM of progress
    success=SendStatusToSCM(SERVICE_RUNNING,
    NO_ERROR, 0, 0, 0);
    if (!success) {terminate(GetLastError()); return;}// Wait for stop signal, and then terminate
    WaitForSingleObject (terminateEvent, INFINITE);terminate(0);
    }
    我只是在ServiceThread里换了代码而已了,请帮助看看了!!
      

  3.   

    您好:
        服务没有得到控制请求,和您真正的执行服务线程没有关系,它是指服务控制面板上的,开始,停止,暂停,继续四个按钮按下后,你的程序没有及时的向服务控制器报告状态。
        如果您的服务是用API完成的,那么您需要检查类似于Service_ctrl的控制响应函数,和类似于ReportStatusToSCMgr函数的状态报告函数。检查是否有遗漏报告的情况,另外,检查ServiceStart函数在设置SERVICE_START_PENDING状态时,是否给于了足够的初始化时间。