Страницы

Поиск по вопросам

суббота, 11 апреля 2020 г.

Сервис не стартует, выдавая ошибку 1053

#cpp #visual_studio #service #visual_studio_2013 #windows_service

                    
Собираю сервис с использованием с++. За основу брал условно-рабочий example, попытки
запустить сервис проводил на нем.
Запускаю код на своей машинее в дебаге/релизе/как обычное приложение/как сервис -
все работает. При попытке запустить данное творение на другой машине как обычное приложение
комп просто не выдает никакого окна. 

В принципе, как понимаю, сервисы и не обязаны отрабатывать как обычные приложения,
поэтому пытаюсь его установить как сервис.(в ком строке от имени админа sc create SERVICENAME
binpath= C:/[---].exe) Устанавливается. Новый процесс появляется в списке сервисов,
при попытке его стартануть (sc start SERVICENAME) комп вежливо отвечает, что 


  the service did not respond to the start or control request in a timely fashion


т е запуск сервиса не модет быть произведен т к сервис не отвечает. 
Как можно с этим справиться?

P.S. вот здесь сырцы полностью.
далее - исходный код самого сервиса

// SimpleService.cpp : Implementation of WinMain

#include "stdafx.h"
#include "resource.h"
#include "SimpleService.h"

class CSimpleServiceModule : public CAtlServiceModuleT< CSimpleServiceModule, IDS_SERVICENAME >
{
public :
    DECLARE_REGISTRY_APPID_RESOURCEID(IDR_SIMPLESERVICE, "{01D73C58-D8F4-4A85-B27D-424443739977}")
    HRESULT InitializeSecurity() throw()
    {
        return S_OK;
    }

    HRESULT PreMessageLoop (int nShowCmd);
    void RunMessageLoop (void) throw();
    void OnContinue (void) throw();
    void OnPause (void) throw();
    void OnShutdown (void) throw();
    void OnStop (void) throw();
};

HRESULT CSimpleServiceModule::PreMessageLoop (int nShowCmd) throw()
{
    return CAtlServiceModuleT< CSimpleServiceModule, IDS_SERVICENAME >::PreMessageLoop
(nShowCmd);
}

void CSimpleServiceModule::RunMessageLoop () throw()
{
    CAtlServiceModuleT< CSimpleServiceModule, IDS_SERVICENAME >::RunMessageLoop ();
}

void CSimpleServiceModule::OnContinue () throw()
{
    CAtlServiceModuleT< CSimpleServiceModule, IDS_SERVICENAME >::OnContinue ();
}

void CSimpleServiceModule::OnPause () throw()
{
    CAtlServiceModuleT< CSimpleServiceModule, IDS_SERVICENAME >::OnPause ();
}

void CSimpleServiceModule::OnShutdown () throw()
{
    OnStop ();
}

void CSimpleServiceModule::OnStop () throw()
{
    CAtlServiceModuleT< CSimpleServiceModule, IDS_SERVICENAME >::OnStop ();
}

CSimpleServiceModule _AtlModule;


//
extern "C" int WINAPI _tWinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, 
                                LPTSTR /*lpCmdLine*/, int nShowCmd)
{
    return _AtlModule.WinMain(nShowCmd);
}

    


Ответы

Ответ 1



Скорее всего у вас на второй машине не установлены рантаймы для C++. Если регистрировать сервис, как сказано в той статье через: SimpleService.exe -service То вы увидите соответствующую ошибку о том, что нет необходимых библиотек.

Комментариев нет:

Отправить комментарий