Пишем сервис. Что может быть проще!
От: Алексей Ширшов Россия http://wise-orm.com
Дата: 30.09.02 08:41
Оценка: 100 (5)
Статья:
Пишем сервис. Что может быть проще!
Автор(ы): Алексей Ширшов
Дата: 29.09.2002
В этой статье вашему вниманию предлагаются несколько классов, которые позволяют быстро и безболезненно создавать системные службы (также называемые сервисами) Windows 2000. Описанные в статье классы и методы работы со службами основаны на книге Дж. Рихтера и Дж. Кларка "Программирование серверных приложений для Windows 2000".


Авторы:
Алексей Ширшов

Аннотация:
В этой статье вашему вниманию предлагаются несколько классов, которые позволяют быстро и безболезненно создавать системные службы (также называемые сервисами) Windows 2000.
Велосипед
От: Mika Sоukhov  
Дата: 01.10.02 08:41
Оценка:
В ATL 7.0 уже реализованны эти вещи Лучше бы было написать статью как делать на новом с использованием аттрибутов и какие новые баги появились чем переписывать старое По моему статьи Федотова было вполне достаточно(лично я научился делать сервисы именно по этой статье)
C ya later.
Re: Пишем сервис. Что может быть проще!
От: ilnar Россия  
Дата: 22.10.03 06:38
Оценка:
Здравствуйте, Алексей Ширшов, Вы писали:

АШ>Статья:



АШ>Авторы:

АШ> Алексей Ширшов

АШ>Аннотация:

АШ>В этой статье вашему вниманию предлагаются несколько классов, которые позволяют быстро и безболезненно создавать системные службы (также называемые сервисами) Windows 2000.

я не могу скомпилять код, нет типа ULONG_PTR, в мсдн он приводится как типы виндовса, внизу — платформ сдк февраль 2003. в моем платформ сдк 2002 этот тип используется, но определения нет (в файлах смотрел).

где этот тип взять или хоть скажите, как он определяется
Re: Пишем сервис. Что может быть проще!
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 28.11.03 15:05
Оценка:
Приветствую!

В статье присутствует ссылка на документ http://www.rsdn.ru/article/baseserv/services.xml
Автор(ы): Сергей Холодилов
Дата: 26.04.2002
Основы написания собственных служб для Windows NT/2000
, хранящийся на сервере, но недоступный из дерева статей. Очевидно, этот документ был superseded другим: http://www.rsdn.ru/article/baseserv/services_details.xml
Автор(ы): Сергей Холодилов
Дата: 22.06.2003
В статье описаны некоторые детали программирования служб Windows NT/2000/XP. Большая часть содержащихся в статье утверждений описывает реакцию Windows на какие-то действия службы. Если вы написали первую службу и хотите двигаться дальше, эта статья вам поможет.
, так вот, хотелось бы как-то сделать ситуацию симметричной (или исправить линк из статьи на services_details, или показать в дереве старую версию)

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re: CIOCP и потоки
От: newb  
Дата: 23.03.05 08:20
Оценка:
Добавил в CServiceContext:
CServiceContext() : m_hThread(NULL), m_iocpThread(0)
{ fAllowPauseCont = fAllowParamChange = false;
  fInteractWithDesktop = false;
  fOwnProcess = true;
}

HANDLE    m_hThread;
friend unsigned __stdcall ThreadProc(LPVOID lpComp);

CIOCP m_iocpThread;

и такой код:
void CServiceContext::OnServiceStart()
{ // стартуем поток
  DebugOut(L"Стартуем поток");
  m_hThread = (HANDLE)_beginthreadex(NULL, 0, &ThreadProc, this, 0, 0);
}

#define CK_QUIT 1

void CServiceContext::OnServiceStop()
{ DebugOut(L"Остановка сервиса");
  if (m_hThread)
  { m_iocpThread.PostStatus(CK_QUIT);
    CloseHandle(m_hThread);
    m_hThread = NULL;
  }
}

unsigned __stdcall ThreadProc(void* lpParam)
{ DebugOut(L"Начало работы ThreadProc");
  CServiceContext *m_pSC = (CServiceContext*)lpParam;

  ULONG_PTR pCompKey;
  DWORD dwNumBytes;
  OVERLAPPED* pov;

  while (true)
  { m_pSC->m_iocpThread.GetStatus(&pCompKey, &dwNumBytes, &pov);
    switch (pCompKey)
    { case CK_QUIT:
        MessageBox(NULL, L"true", L"ThreadProc", MB_ICONERROR | MB_OK | MB_SERVICE_NOTIFICATION);
        return 1;
      default:
        MessageBox(NULL, L"false", L"ThreadProc", MB_ICONERROR | MB_OK | MB_SERVICE_NOTIFICATION);
    }
  }
  return 0;
}


Но почему-то ни один в ThreadProc не выскакивает ?
Re: Пишем сервис. Что может быть проще!
От: ABC  
Дата: 06.05.05 15:23
Оценка:
Здравствуйте, Алексей Ширшов, Вы писали:

АШ>Аннотация:

АШ>В этой статье вашему вниманию предлагаются несколько классов, которые позволяют быстро и безболезненно создавать системные службы (также называемые сервисами) Windows 2000.

Скажите, а как в рамках описанных классов, по инициативе запущенного сервиса, остановить сервис?

Я, например, хочу, чтобы при каких-то внутренних ошибках сервис корректно останавливался с некоторым кодом возврата, чтобы ОС могла перезапустить его своими средствами?

С уважением,
Александр
Re: Пишем сервис. Что может быть проще!
От: crea7or http://crea7or.spb.ru
Дата: 09.08.08 10:31
Оценка:
АШ>Статья:
АШ>Пишем сервис. Что может быть проще!
Автор(ы): Алексей Ширшов
Дата: 29.09.2002
В этой статье вашему вниманию предлагаются несколько классов, которые позволяют быстро и безболезненно создавать системные службы (также называемые сервисами) Windows 2000. Описанные в статье классы и методы работы со службами основаны на книге Дж. Рихтера и Дж. Кларка "Программирование серверных приложений для Windows 2000".


А чего пример то не рабочий? Служба инсталируется , но не запускается — service did not respond. Месадж боксы убил, а толку 0. Где то внутри висит, ибо не деинсталируется пока не прибъёшь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.