Как создать всегда на процессе? - PullRequest
0 голосов
/ 07 января 2020

Ситуация: у нас есть резервный сервер, и пространство на жестком диске может быть заполнено за 5 минут.

Что я хочу сделать? Я пытаюсь создать систему мониторинга, которая будет контролировать пространство каждые 2-3 минуты и отправлять почту, если свободное пространство меньше X ГБ.

Вопрос: Каков наилучший способ разработки такой системы? ? Как мой EXE будет работать непрерывно? Он также должен запускаться автоматически при запуске сервера.

Я буду использовать C ++

Примечание: Пожалуйста, НЕ предлагайте никаких существующих услуг / процессов мониторинга. Нам нужно разработать это для нашей платформы.

** Обновление: это мой код: **


void  ServiceMain(DWORD dwArgc, LPTSTR* lpszArgv)
{
    WinService WinService_o;

    gSvcStatusHandle = RegisterServiceCtrlHandler(
        SVCNAME,
        ServiceControlHandler);

    if (!gSvcStatusHandle)
    {
        WinService_o.SvcReportEvent( (LPTSTR) TEXT("RegisterServiceCtrlHandler"));
        return;
    }

    gSvcStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
    gSvcStatus.dwServiceSpecificExitCode = 0;

    WinService_o.ReportServiceStatus(SERVICE_START_PENDING, NO_ERROR, 3000);

    WinService_o.PerformService(dwArgc, lpszArgv);

}



int main(int argc, char* argv[])
{
    std::cout << "Hello!\n";

     WinService WinService_o;

     if (argc > 1)
     {
         if (strcmp(argv[1], "-install") == 0)
         {
             printf("Starting the installation process\n");

             WinService_o.DeleteSvc();
             WinService_o.SvcInstall();
             return 1; 

         }
     }


    SERVICE_TABLE_ENTRY DispatchTable[] = 
    {
        { (LPWSTR)SVCNAME, (LPSERVICE_MAIN_FUNCTION)ServiceMain },
        { NULL, NULL }
    };


    if (!StartServiceCtrlDispatcherW(DispatchTable))
    {
        cout << "test";

        WinService_o.SvcReportEvent( (LPTSTR) TEXT("StartServiceCtrlDispatcher"));

    }

Но не удается запустить службу со следующей ошибкой. Я вижу ошибку по событию

StartServiceCtrlDispatcher не удалось с 1063

Может кто-нибудь помочь, пожалуйста?

1 Ответ

0 голосов
/ 07 января 2020

Вы ответили на свой вопрос, отметив его как :

Windows сервисы - процессы фоновых сервисов , выполняемые Диспетчер управления службами в операционных системах на основе Windows NT, аналогично демонам или UNIX службам.

Напишите свое приложение как служба . Служба работает в фоновом режиме, даже когда ни один пользователь не вошел в систему, и может быть настроен на автоматический запуск с ОС. То, о чем вы просите, - это как раз та ситуация, для которой служба хорошо подходит.

См. Сервисы и Сервисные программы на MSDN для получения более подробной информации и полного C / C ++ примеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...