⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jk_nt_service.c

📁 Tomcat 4.1与WebServer集成组件的源代码包.
💻 C
📖 第 1 页 / 共 4 页
字号:
                                NO_ERROR,              // exit code                                3000)) {                 // wait hint                start_jk_service(lpszArgv[0]);        }    }    // try to report the stopped status to the service control manager.    //    if(sshStatusHandle) {        ReportStatusToSCMgr(SERVICE_STOPPED,                            dwErr,                            0);    }}void WINAPI service_ctrl(DWORD dwCtrlCode){    /*     * Handle the requested control code.     */    switch(dwCtrlCode)    {        /*         * Stop the service.         */        case SERVICE_CONTROL_SHUTDOWN:        case SERVICE_CONTROL_STOP:            ssStatus.dwCurrentState = SERVICE_STOP_PENDING;            stop_jk_service();            break;        /*         * Update the service status.         */        case SERVICE_CONTROL_INTERROGATE:            break;        /*         * Invalid control code, nothing to do.         */        default:            break;    }    ReportStatusToSCMgr(ssStatus.dwCurrentState, NO_ERROR, 0);}BOOL ReportStatusToSCMgr(DWORD dwCurrentState,                         DWORD dwWin32ExitCode,                         DWORD dwWaitHint){    static DWORD dwCheckPoint = 1;    BOOL fResult = TRUE;    if(dwCurrentState == SERVICE_START_PENDING) {        ssStatus.dwControlsAccepted = 0;    } else {        ssStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN;    }    ssStatus.dwCurrentState = dwCurrentState;    ssStatus.dwWin32ExitCode = dwWin32ExitCode;    ssStatus.dwWaitHint = dwWaitHint;    if((dwCurrentState == SERVICE_RUNNING) ||       (dwCurrentState == SERVICE_STOPPED)) {        ssStatus.dwCheckPoint = 0;    } else {        ssStatus.dwCheckPoint = dwCheckPoint++;    }    if(!(fResult = SetServiceStatus(sshStatusHandle, &ssStatus))) {        AddToMessageLog(TEXT("SetServiceStatus"));    }    return fResult;}typedef WINADVAPI BOOL (WINAPI * pfnChangeServiceConfig2_t)                       (SC_HANDLE hService, DWORD dwInfoLevel, LPVOID lpInfo);void install_service(char *name,                      char *dname,                      char *user,                      char *password,                      char *deps,                      BOOL bAutomatic,                     char *rel_prp_file){    SC_HANDLE   schService;    SC_HANDLE   schSCManager;    char        szExecPath[2048];    char        szPropPath[2048];    char        szTrueName[256];    char        *dummy;    char        *src, *dst;    dst = szTrueName;    for (src = name; *src; ++src) {        if (dst >= szTrueName + sizeof(szTrueName) - 1) {            break;        }        if (!isspace(*src) && *src != '/' && *src != '\\') {            *(dst++) = *src;        }    }    *dst = '\0';    if (0 == stricmp("", deps))        deps = NULL;    /* XXX strcat( deps, "Tcpip\0Afd\0" ); */        if(!GetFullPathName(rel_prp_file, sizeof(szPropPath) - 1, szPropPath, &dummy)) {        printf("Unable to install %s - %s\n",                name,                GetLastErrorText(szErr, sizeof(szErr)));        return;    }    if(!jk_file_exists(szPropPath)) {        printf("Unable to install %s - File [%s] does not exists\n",                name,                szPropPath);        return;    }    szExecPath[0] = '\"';    if(GetModuleFileName( NULL, szExecPath + 1, sizeof(szExecPath) - 2) == 0) {        /* Was: if(GetModuleFileName( NULL, szExecPath, sizeof(szExecPath) - 1) == 0) { */        printf("Unable to install %s - %s\n",                name,                GetLastErrorText(szErr, sizeof(szErr)));        return;    }    strcat(szExecPath, "\" ");    strcat(szExecPath, szTrueName);    schSCManager = OpenSCManager(NULL,     // machine (NULL == local)                                 NULL,     // database (NULL == default)                                 SC_MANAGER_ALL_ACCESS);   // access required                           if(schSCManager) {        schService = CreateService(schSCManager, // SCManager database                                   szTrueName,   // name of service                                   dname,         // name to display                                   SERVICE_ALL_ACCESS, // desired access                                   SERVICE_WIN32_OWN_PROCESS,  // service type                                   bAutomatic ? SERVICE_AUTO_START : SERVICE_DEMAND_START,       // start type                                   SERVICE_ERROR_NORMAL,       // error control type                                   szExecPath,                 // service's binary                                   NULL,                       // no load ordering group                                   NULL,                       // no tag identifier                                   deps,                       // dependencies                                   user,                       // account                                   password);                  // password        if(schService) {                        printf("The service named %s was created. Now adding registry entries\n", name);                        if(set_registry_values(schService, szTrueName, szPropPath)) {                CloseServiceHandle(schService);            } else {                printf("CreateService failed setting the private registry - %s\n", GetLastErrorText(szErr, sizeof(szErr)));                DeleteService(schService);                CloseServiceHandle(schService);            }        } else {            printf("CreateService failed - %s\n", GetLastErrorText(szErr, sizeof(szErr)));        }        CloseServiceHandle(schSCManager);    } else {         printf("OpenSCManager failed - %s\n", GetLastErrorText(szErr, sizeof(szErr)));    }}void remove_service(char *name){    SC_HANDLE   schService;    SC_HANDLE   schSCManager;    char        szNameBuff[256];    DWORD       lenNameBuff = 256;    char        *szTrueName = name;    schSCManager = OpenSCManager(NULL,          // machine (NULL == local)                                 NULL,          // database (NULL == default)                                 SC_MANAGER_ALL_ACCESS );  // access required                            if(schSCManager) {        if (GetServiceKeyName(schSCManager, name, szNameBuff, &lenNameBuff)) {            szTrueName = szNameBuff;        }        schService = OpenService(schSCManager, szTrueName, SERVICE_ALL_ACCESS);        if(schService) {            // try to stop the service            if(ControlService( schService, SERVICE_CONTROL_STOP, &ssStatus )) {                printf("Stopping %s.", name);                Sleep(1000);                while(QueryServiceStatus(schService, &ssStatus )) {                    if(ssStatus.dwCurrentState == SERVICE_STOP_PENDING) {                        printf(".");                        Sleep(1000);                    } else {                        break;                    }                }                if(ssStatus.dwCurrentState == SERVICE_STOPPED) {                    printf("\n%s stopped.\n", name);                } else {                    printf("\n%s failed to stop.\n", name);                }            }            // now remove the service            if(DeleteService(schService)) {                printf("%s removed.\n", name);            } else {                printf("DeleteService failed - %s\n", GetLastErrorText(szErr, sizeof(szErr)));            }            CloseServiceHandle(schService);        } else {            printf("OpenService failed - %s\n", GetLastErrorText(szErr, sizeof(szErr)));        }        CloseServiceHandle(schSCManager);    } else {        printf("OpenSCManager failed - %s\n", GetLastErrorText(szErr, sizeof(szErr)));    }}void start_service(char *name, char *machine){    SC_HANDLE   schService;    SC_HANDLE   schSCManager;    schSCManager = OpenSCManager(machine,  // machine (NULL == local)                                 NULL,     // database (NULL == default)                                 SC_MANAGER_ALL_ACCESS);   // access required                           if(schSCManager) {        schService = OpenService(schSCManager, name, SERVICE_ALL_ACCESS);        if(schService) {            // try to start the service            if(StartService(schService, 0, NULL)) {                printf("Starting %s.", name);                Sleep(1000);                while(QueryServiceStatus(schService, &ssStatus )) {                    if(ssStatus.dwCurrentState == SERVICE_START_PENDING) {                        printf(".");                        Sleep(1000);                    } else {                        break;                    }                }                if(ssStatus.dwCurrentState == SERVICE_RUNNING) {                    printf("\n%s started.\n", name);                } else {                    printf("\n%s failed to start.\n", name);                }            }            else                printf("StartService failed - %s\n", GetLastErrorText(szErr, sizeof(szErr)));            CloseServiceHandle(schService);        } else {            printf("OpenService failed - %s\n", GetLastErrorText(szErr, sizeof(szErr)));        }        CloseServiceHandle(schSCManager);    } else {        printf("OpenSCManager failed - %s\n", GetLastErrorText(szErr, sizeof(szErr)));    }}void stop_service(char *name, char *machine){    SC_HANDLE   schService;    SC_HANDLE   schSCManager;    schSCManager = OpenSCManager(machine,  // machine (NULL == local)                                 NULL,     // database (NULL == default)                                 SC_MANAGER_ALL_ACCESS);   // access required                           if(schSCManager) {        schService = OpenService(schSCManager, name, SERVICE_ALL_ACCESS);        if(schService) {            // try to stop the service            if(ControlService( schService, SERVICE_CONTROL_STOP, &ssStatus )) {                printf("Stopping %s.", name);                Sleep(1000);                while(QueryServiceStatus(schService, &ssStatus )) {                    if(ssStatus.dwCurrentState == SERVICE_STOP_PENDING) {                        printf(".");                        Sleep(1000);                    } else {                        break;                    }                }                if(ssStatus.dwCurrentState == SERVICE_STOPPED) {                    printf("\n%s stopped.\n", name);                } else {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -