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

📄 apachemonitor.c

📁 Apache官方在今天放出产品系列2.2的最新版本2.2.11的源码包 最流行的HTTP服务器软件之一
💻 C
📖 第 1 页 / 共 5 页
字号:
            ErrorMessage(NULL, FALSE);            g_bConsoleRun = FALSE;            SetCursor(g_hCursorArrow);            return FALSE;        }        else if (!serviceFlag)        {            _sntprintf(szMsg, sizeof(szMsg) / sizeof(TCHAR),                       g_lpMsg[IDS_MSG_SRVSTARTED - IDS_MSG_FIRST],                      szServiceName);            addListBoxString(g_hwndStdoutList, szMsg);            g_bConsoleRun = FALSE;            SetCursor(g_hCursorArrow);            return TRUE;        }    }    else    {        schSCManager = OpenSCManager(szComputerName, NULL,                                     SC_MANAGER_CONNECT);        if (!schSCManager) {            ErrorMessage(g_lpMsg[IDS_MSG_SRVFAILED - IDS_MSG_FIRST],                         FALSE);            return FALSE;        }        schService = OpenService(schSCManager, szServiceName,                                 SERVICE_QUERY_STATUS | SERVICE_START |                                 SERVICE_STOP | SERVICE_USER_DEFINED_CONTROL);        if (schService == NULL)        {            /* Avoid recursion of ImagePath NULL (from this Respawn) */            if (szImagePath) {                am_RespawnAsUserAdmin(g_hwndMain, dwCommand,                                       szServiceName, szComputerName);            }            else {                ErrorMessage(g_lpMsg[IDS_MSG_SRVFAILED - IDS_MSG_FIRST],                             FALSE);            }            CloseServiceHandle(schSCManager);            return FALSE;        }        else        {            retValue = FALSE;            g_bConsoleRun = TRUE;            SetCursor(g_hCursorHourglass);            switch (dwCommand)            {            case SERVICE_CONTROL_STOP:                _sntprintf(szMsg, sizeof(szMsg) / sizeof(TCHAR),                           g_lpMsg[IDS_MSG_SRVSTOP - IDS_MSG_FIRST],                          szServiceName);                addListBoxString(g_hwndStdoutList, szMsg);                if (ControlService(schService, SERVICE_CONTROL_STOP,                                   &schSStatus)) {                    Sleep(1000);                    while (QueryServiceStatus(schService, &schSStatus))                    {                        if (schSStatus.dwCurrentState == SERVICE_STOP_PENDING)                        {                            Sleep(1000);                        }                        else {                            break;                        }                    }                }                if (QueryServiceStatus(schService, &schSStatus))                {                    if (schSStatus.dwCurrentState == SERVICE_STOPPED)                    {                        retValue = TRUE;                        _sntprintf(szMsg, sizeof(szMsg) / sizeof(TCHAR),                                   g_lpMsg[IDS_MSG_SRVSTOPPED - IDS_MSG_FIRST],                                  szServiceName);                        addListBoxString(g_hwndStdoutList, szMsg);                    }                }                break;            case SERVICE_CONTROL_CONTINUE:                _sntprintf(szMsg, sizeof(szMsg) / sizeof(TCHAR),                          g_lpMsg[IDS_MSG_SRVSTART - IDS_MSG_FIRST],                          szServiceName);                addListBoxString(g_hwndStdoutList, szMsg);                if (StartService(schService, 0, NULL))                {                    Sleep(1000);                    while (QueryServiceStatus(schService, &schSStatus))                    {                        if (schSStatus.dwCurrentState == SERVICE_START_PENDING)                        {                            Sleep(1000);                        }                        else {                            break;                        }                    }                }                if (QueryServiceStatus(schService, &schSStatus))                {                    if (schSStatus.dwCurrentState == SERVICE_RUNNING)                    {                        retValue = TRUE;                        _sntprintf(szMsg, sizeof(szMsg) / sizeof(TCHAR),                                   g_lpMsg[IDS_MSG_SRVSTARTED - IDS_MSG_FIRST],                                  szServiceName);                        addListBoxString(g_hwndStdoutList, szMsg);                    }                }                break;            case SERVICE_APACHE_RESTART:                _sntprintf(szMsg, sizeof(szMsg) / sizeof(TCHAR),                           g_lpMsg[IDS_MSG_SRVRESTART - IDS_MSG_FIRST],                          szServiceName);                addListBoxString(g_hwndStdoutList, szMsg);                if (ControlService(schService, SERVICE_APACHE_RESTART,                                   &schSStatus))                {                    ticks = 60;                    while (schSStatus.dwCurrentState == SERVICE_START_PENDING)                    {                        Sleep(1000);                        if (!QueryServiceStatus(schService, &schSStatus))                        {                            CloseServiceHandle(schService);                            CloseServiceHandle(schSCManager);                            g_bConsoleRun = FALSE;                            SetCursor(g_hCursorArrow);                            return FALSE;                        }                        if (!--ticks) {                            break;                        }                    }                }                if (schSStatus.dwCurrentState == SERVICE_RUNNING)                {                    retValue = TRUE;                    _sntprintf(szMsg, sizeof(szMsg) / sizeof(TCHAR),                               g_lpMsg[IDS_MSG_SRVRESTARTED - IDS_MSG_FIRST],                              szServiceName);                    addListBoxString(g_hwndStdoutList, szMsg);                }                break;            }            CloseServiceHandle(schService);            CloseServiceHandle(schSCManager);            if (!retValue) {                ErrorMessage(g_lpMsg[IDS_MSG_SRVFAILED - IDS_MSG_FIRST],                             FALSE);            }            g_bConsoleRun = FALSE;            SetCursor(g_hCursorArrow);            return retValue;        }        return FALSE;    }    return FALSE;}BOOL IsServiceRunning(LPCTSTR szServiceName, LPCTSTR szComputerName,                      LPDWORD lpdwPid){    DWORD dwPid;    HWND hWnd;    SC_HANDLE schService;    SC_HANDLE schSCManager;    SERVICE_STATUS schSStatus;    if (g_dwOSVersion == OS_VERSION_WIN9X)    {        hWnd = FindWindow(_T("ApacheWin95ServiceMonitor"), szServiceName);        if (hWnd && GetWindowThreadProcessId(hWnd, &dwPid))        {            *lpdwPid = 1;            return TRUE;        }        else {            return FALSE;        }    }    else    {        dwPid = 0;        schSCManager = OpenSCManager(szComputerName, NULL,                                     SC_MANAGER_CONNECT);        if (!schSCManager) {            return FALSE;        }        schService = OpenService(schSCManager, szServiceName,                                 SERVICE_QUERY_STATUS);        if (schService != NULL)        {            if (QueryServiceStatus(schService, &schSStatus))            {                dwPid = schSStatus.dwCurrentState;                if (lpdwPid) {                    *lpdwPid = 1;                }            }            CloseServiceHandle(schService);            CloseServiceHandle(schSCManager);            return dwPid == SERVICE_RUNNING ? TRUE : FALSE;        }        else {            g_bRescanServices = TRUE;        }        CloseServiceHandle(schSCManager);        return FALSE;    }    return FALSE;}BOOL FindRunningServices(void){    int i = 0;    DWORD dwPid;    BOOL rv = FALSE;    while (g_stServices[i].szServiceName != NULL)    {        if (!IsServiceRunning(g_stServices[i].szServiceName,                              g_stServices[i].szComputerName, &dwPid)) {            dwPid = 0;        }        if (g_stServices[i].dwPid != dwPid) {            rv = TRUE;        }        g_stServices[i].dwPid = dwPid;        ++i;    }    return rv;}BOOL GetApacheServicesStatus(){    TCHAR szKey[MAX_PATH];    TCHAR achKey[MAX_PATH];    TCHAR szImagePath[MAX_PATH];    TCHAR szBuf[MAX_PATH];    TCHAR szTmp[MAX_PATH];    HKEY hKey, hSubKey, hKeyRemote;    DWORD retCode, rv, dwKeyType;    DWORD dwBufLen = MAX_PATH;    int i, stPos = 0;    int computers = 0;    g_bRescanServices = FALSE;    am_ClearServicesSt();    while (g_stComputers[computers].szComputerName != NULL) {        hKeyRemote = g_stComputers[computers].hRegistry;        retCode = RegOpenKeyEx(hKeyRemote,                               _T("System\\CurrentControlSet\\Services\\"),                               0, KEY_READ, &hKey);        if (retCode != ERROR_SUCCESS)        {            ErrorMessage(NULL, FALSE);            return FALSE;        }        for (i = 0, retCode = ERROR_SUCCESS; retCode == ERROR_SUCCESS; i++)        {            retCode = RegEnumKey(hKey, i, achKey, MAX_PATH);            if (retCode == ERROR_SUCCESS)            {                _tcscpy(szKey, _T("System\\CurrentControlSet\\Services\\"));                _tcscat(szKey, achKey);                if (RegOpenKeyEx(hKeyRemote, szKey, 0,                                 KEY_QUERY_VALUE, &hSubKey) == ERROR_SUCCESS)                {                    dwBufLen = MAX_PATH;                    rv = RegQueryValueEx(hSubKey, _T("ImagePath"), NULL,                                         &dwKeyType, (LPBYTE)szImagePath, &dwBufLen);                    if (rv == ERROR_SUCCESS                            && (dwKeyType == REG_SZ                             || dwKeyType == REG_EXPAND_SZ)                            && dwBufLen)                    {                        _tcscpy(szBuf, szImagePath);                        CharLower(szBuf);                        /* the service name could be httpd*.exe or Apache*.exe */                        if (((_tcsstr(szBuf, _T("\\apache")) != NULL)                             || (_tcsstr(szBuf, _T("\\httpd")) != NULL))                                && _tcsstr(szBuf, _T(".exe"))                                && (_tcsstr(szBuf, _T("--ntservice")) != NULL                                       || _tcsstr(szBuf, _T("-k ")) != NULL))                        {                            g_stServices[stPos].szServiceName = _tcsdup(achKey);                            g_stServices[stPos].szImagePath = _tcsdup(szImagePath);                            g_stServices[stPos].szComputerName =                                _tcsdup(g_stComputers[computers].szComputerName);                            dwBufLen = MAX_PATH;                            if (RegQueryValueEx(hSubKey, _T("Description"), NULL,                                                &dwKeyType, (LPBYTE)szBuf, &dwBufLen)                                    == ERROR_SUCCESS) {                                g_stServices[stPos].szDescription = _tcsdup(szBuf);                            }                            dwBufLen = MAX_PATH;                            if (RegQueryValueEx(hSubKey, _T("DisplayName"), NULL,                                                &dwKeyType, (LPBYTE)szBuf, &dwBufLen)                                    == ERROR_SUCCESS)                            {                                if (_tcscmp(g_stComputers[computers]                                        .szComputerName, g_szLocalHost) != 0)                                {                                    _tcscpy(szTmp, g_stComputers[computers]                                                      .szComputerName + 2);                                    _tcscat(szTmp, _T("@"));                                    _tcscat(szTmp, szBuf);                                }                                else {                                    _tcscpy(szTmp, szBuf);                                }                                g_stServices[stPos].szDisplayName = _tcsdup(szTmp);                            }                            ++stPos;                            if (stPos >= MAX_APACHE_SERVICES) {                                retCode = !ERROR_SUCCESS;                            }                        }                    }                    RegCloseKey(hSubKey);                }            }        }        ++computers;        RegCloseKey(hKey);    }    FindRunningServices();    return TRUE;}LRESULT CALLBACK ConnectDlgProc(HWND hDlg, UINT message,                                WPARAM wParam, LPARAM lParam){    TCHAR szCmp[MAX_COMPUTERNAME_LENGTH+4];    switch (message)    {    case WM_INITDIALOG:        ShowWindow(hDlg, SW_HIDE);        g_hwndConnectDlg = hDlg;        CenterWindow(hDlg);        ShowWindow(hDlg, SW_SHOW);        SetFocus(GetDlgItem(hDlg, IDC_COMPUTER));        return TRUE;    case WM_COMMAND:        switch (LOWORD(wParam))        {        case IDOK:            memset(szCmp, 0, sizeof(szCmp));            _tcscpy(szCmp, _T("\\\\"));            SendMessage(GetDlgItem(hDlg, IDC_COMPUTER), WM_GETTEXT,                        (WPARAM) MAX_COMPUTERNAME_LENGTH,                        (LPARAM) szCmp+2);            _tcsupr(szCmp);            if (_tcslen(szCmp) < 3) {                EndDialog(hDlg, TRUE);                return TRUE;            }            am_ConnectComputer(szCmp);            SendMessage(g_hwndMain, WM_TIMER, WM_TIMER_RESCAN, 0);        case IDCANCEL:            EndDialog(hDlg, TRUE);            return TRUE;        case IDC_LBROWSE:        {            BROWSEINFO bi;            ITEMIDLIST *il;            LPMALLOC pMalloc;            memset(&bi, 0, sizeof(BROWSEINFO));            SHGetSpecialFolderLocation(hDlg, CSIDL_NETWORK, &il);

⌨️ 快捷键说明

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