#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 То вы увидите соответствующую ошибку о том, что нет необходимых библиотек.
Комментариев нет:
Отправить комментарий