// BPSystemInfo.cpp : Implementation of WinMain#include"stdafx.h"#include"resource.h"// The module attribute causes WinMain to be automatically implemented for you
[ module(SERVICE, uuid = "{D1FD36AA-1799-4F51-B1AD-1312B0540206}",
name = "BPSystemInfo",
helpstring = "BPSystemInfo 1.0 Type Library",
resource_name="IDS_SERVICENAME") ]
class CBPSystemInfoModule
{
public:
HRESULT InitializeSecurity() throw()
{
// TODO : Call CoInitializeSecurity and provide the appropriate security settings for
// your service
// Suggested - PKT Level Authentication,
// Impersonation Level of RPC_C_IMP_LEVEL_IDENTIFY
// and an appropiate Non NULL Security Descriptor.return S_OK;
}
/**
Главная функция сервиса. При выходе из нее сервис завершает свою работу.
*/
HRESULT Run( int nShowCmd = SW_HIDE ) throw( );
/**
Функция обратного вызова. Вызывается системой, если необходимо остановить сервис.
*/void OnStop() throw();
/**
Функция обратного вызова. Вызывается системой при выключении компьютера.
*/void OnShutdown() throw()
{
OnStop();
}
};
void CBPSystemInfoModule::OnStop() throw()
{
SetServiceStatus(SERVICE_STOP_PENDING);
}
HRESULT CBPSystemInfoModule::Run( int nShowCmd ) throw( )
{
return CAtlServiceModuleT<CBPSystemInfoModule,IDS_SERVICENAME>::Run(nShowCmd);
}
Все главные функции на месте, компилируется все нормально, устанавливается в систему без проблем с помощью CreateService. НО! При попытке запуска службы — "Служба не ответила на запрос своевременно". Что не хватает в данном каркасе? Мне бы хотелось получить службу, которая работала бы, но ничего не имела бы внутрях.
А>[/ccode] А>Все главные функции на месте, компилируется все нормально, устанавливается в систему без проблем с помощью CreateService. НО! При попытке запуска службы — "Служба не ответила на запрос своевременно". Что не хватает в данном каркасе?
Зачем там КОМ обьект?
"ssm" <13021@users.rsdn.ru> wrote in message news:1100296@news.rsdn.ru...
From: ssm
Здравствуйте, Аноним, Вы писали:
А>[/ccode] А>Все главные функции на месте, компилируется все нормально, устанавливается в систему без проблем с помощью CreateService. НО! При попытке запуска службы — "Служба не ответила на запрос своевременно". Что не хватает в данном каркасе?
Добавь хотя бы один COM объект в проэкт
мужчины делятся на тех у кого есть спиннинг, и на тех у кого его нет
icq 98-120-682
Re: Пишем простейщий сервис. Помогите. Оценить
Плохой там дизайн. Одно только отсутствие поддержки нескольких сервисов в одном модуле искажает лицо
"ssm" <13021@users.rsdn.ru> wrote in message news:1103362@news.rsdn.ru...
From: ssm
Здравствуйте, chabster, Вы писали:
C>Зачем там КОМ обьект?
by design, за подробностями в поиск
мужчины делятся на тех у кого есть спиннинг, и на тех у кого его нет
icq 98-120-682
Re[3]: Пишем простейщий сервис. Помогите. Оценить
Здравствуйте, chabster, Вы писали:
C>Плохой там дизайн. Одно только отсутствие поддержки нескольких сервисов в одном модуле искажает лицо
и тебя тоже с 1 апреля
мужчины делятся на тех у кого есть спиннинг, и на тех у кого его нет
icq 98-120-682
Re[5]: Пишем простейщий сервис. Помогите. Оценить
Posted via RSDN NNTP Server 1.9
Re[2]: Пишем простейщий сервис. Помогите.
От:
Аноним
Дата:
04.04.05 14:12
Оценка:
Здравствуйте, ssm, Вы писали:
ssm>Добавь хотя бы один COM объект в проэкт
Здравствуйте, ssm, Вы писали:
ssm>Здравствуйте, Владислав, Вы писали:
В>>Можно и не добовлять. В>>В stdafx.h добавь строчку:
В>>#define _ATL_NO_COM_SUPPORT
В>>Должно помочь.
ssm> ssm>а это проверялось? просто очень интерестно, а времени на "проверить" жалко
Здравствуйте, Аноним, Вы писали:
А>Хм, а у меня все тоже самое — на запрос не ответила своевременно. Можно мне выслать пустой рабочий сервис?
Ок.
По шагам — создание простого сервиса с использованием библиотеки ATL (VS 7.1)
1. Wizard -> ATL -> ATL Project -> Service (EXE) без поддержки атрибутов. Называем его SimpleService.
2. Из solution, который сгенерил wizard, удаляем проект SimpleServiceSP.
3. Удаляем idl файл, папку — Generated Files вместе с SimpleService_i.c
4. Открываем файл SimpleService.cpp и видим такую картину:
// SimpleService.cpp : Implementation of WinMain#include"stdafx.h"#include"resource.h"#include"SimpleService.h"class CSimpleServiceModule : public CAtlServiceModuleT< CSimpleServiceModule, IDS_SERVICENAME >
{
public :
DECLARE_LIBID(LIBID_SimpleServiceLib)
DECLARE_REGISTRY_APPID_RESOURCEID(IDR_SIMPLESERVICE, "{01D73C58-D8F4-4A85-B27D-424443739977}")
HRESULT InitializeSecurity() throw()
{
// TODO : Call CoInitializeSecurity and provide the appropriate security settings for
// your service
// Suggested - PKT Level Authentication,
// Impersonation Level of RPC_C_IMP_LEVEL_IDENTIFY
// and an appropiate Non NULL Security Descriptor.return S_OK;
}
};
CSimpleServiceModule _AtlModule;
//extern"C"int WINAPI _tWinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/,
LPTSTR /*lpCmdLine*/, int nShowCmd)
{
return _AtlModule.WinMain(nShowCmd);
}
Вносим изменения:
1. Убираем строчку DECLARE_LIBID(LIBID_SimpleServiceLib), т.к. она на хрен не нужна.
2. Добовляем евенты, что — бы потом легче жилось:
5. Открываем в студии вкладку — Solution Explorer, находим файло SimpleService.rc, открываем его как source file в редакторе VS, выносим оттуда tlb файл, в нашем случае — SimpleService.tlb.
В>Вносим изменения: В>1. Убираем строчку DECLARE_LIBID(LIBID_SimpleServiceLib), т.к. она на хрен не нужна. В>2. Добовляем евенты, что — бы потом легче жилось:
Проверил _ATL_NO_COM_SUPPORT, действительно пашет Спасибо еще раз.
Я обычно делаю по другому, переопределяю:
HRESULT PreMessageLoop(int nShowCmd)
{
HRESULT hr = Base::PreMessageLoop(nShowCmd);
DWORD WINAPI ThreadProc(CtestServModule *servModule);
//создаю новый поток, в котором и ведется вся работа
workThread.Attach(
AtlCreateThread(ThreadProc, this));
return hr;
}
HRESULT PostMessageLoop()
{
//жду окончания потока
isStopped = true;
::WaitForSingleObject(workThread, 1000);
return Base::PostMessageLoop();
}
Re[8]: Пишем простейщий сервис. Помогите.
От:
Аноним
Дата:
07.04.05 06:54
Оценка:
Здравствуйте, Владислав, Вы писали:
В>Запускаем... Круто — работает, что и требовалось. В>Стопим... Cool, останов произошёл !
В>Извини за некоторый вольный стиль изложения — времени у меня очень мало. В>Сорцы работающего SimpleService здесь.
Огромное спасибо! Все так просто оказывается.
Re: Создание простого сервиса с использованием библиотеки AT
От:
Аноним
Дата:
12.04.05 09:50
Оценка:
Здравствуйте, Владислав, Вы писали:
Круто. Всё работает.
Ура !!!!!!!!!!!!!
Re: Создание простого сервиса с использованием библиотеки AT
От:
Аноним
Дата:
12.04.05 09:54
Оценка:
Здравствуйте, Владислав,
А как там написать ASSERT
Re: Создание простого сервиса с использованием библиотеки AT
От:
Аноним
Дата:
15.04.05 06:21
Оценка:
Здравствуйте, Владислав
Скажите, пожалуйста, а в какой функции должнен быть код, отвечающий за загрузку слыжбы, а в какой основной её код.
Я попробовал сделать это в ServiceMain,и тогда служба выполнила свой код, но SCM показалось, что служба зависла, видимо, она не ответила на какой-то запрос.