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