我知道只要注册为服务器的进程,是不能通过Ctrl+Del+Alt,(2K/98 下都一样)来删除的。但怎么把自己的进程注册为服务器进程呢?我不知道(废话!),希望大家能告诉我,该怎么来,或者有例子的话,请给个地址我下载,或发例子到我的信箱。谁能帮我解决这个问题,我定给500分,决不食言!

解决方案 »

  1.   

    你说的是Service吧,那不叫服务器,叫服务。是操作系统Platform SDK的东西,不过2000/98/NT差别不大。你到msdn里查一下有现成的例子。
    DWORD StartSampleService() 

        SERVICE_STATUS ssStatus; 
        DWORD dwOldCheckPoint; 
        DWORD dwStartTickCount;
        DWORD dwWaitTime;
        DWORD dwStatus;
     
        schService = OpenService( 
            schSCManager,          // SCM database 
            "Sample_Srv",          // service name
            SERVICE_ALL_ACCESS); 
     
        if (schService == NULL) 
        { 
            MyErrorExit("OpenService"); 
        }
     
        if (!StartService(
                schService,  // handle to service 
                0,           // number of arguments 
                NULL) )      // no arguments 
        {
            MyErrorExit("StartService"); 
        }
        else 
        {
            printf("Service start pending.\n"); 
        }
     
        // Check the status until the service is no longer start pending. 
     
        if (!QueryServiceStatus( 
                schService,   // handle to service 
                &ssStatus) )  // address of status information structure
        {
            MyErrorExit("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;
                }
            }
        }     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); 
        return dwStatus;

      

  2.   

    只能在win9x下使用,在winnt,win2000下不能使用,用了也不起作用。