Re[8]: Программирование служб: подробности
От: SergH Россия  
Дата: 26.05.04 11:54
Оценка: 9 (1)
Здравствуйте, dimchick, Вы писали:

D>структурка маленькая — ~80 байт. просто я не люблю такой подход.


Я тоже. Но в данном случае процесс заверщается почти сразу по завершению ServiceMain.. Моей совести этого достаточно

D>я тут подумал, _endthread тоже некорректно. По прототипу ServiceMain не подходит для создания потока, Значит ее кто-то вызывает и по возвращению из нее может что-то делать.


Логично. Хуже того, этот "кто-то" может быть написан на C и использовать RTL.

D>Почему MS не дала возможность создавать поток нам?


При большом желании можно обойти ситуацию "вручную". Т.е. вначале ServiceMain определять, была ли RTL инициализирована, и, если нет — инициализировать. А в конце очищать, если в начале инициализировали. Сделать логично в виде объекта, который в конструкторе проверяет и инициализирует, а в деструкторе очищает.
Делай что должно, и будь что будет
Re[9]: Программирование служб: подробности
От: SergH Россия  
Дата: 26.05.04 12:01
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Логично. Хуже того, этот "кто-то" может быть написан на C и использовать RTL.


Имелось ввиду, что просто деинициализировать RTL, даже не завершая поток, тоже нехорошо. .
Делай что должно, и будь что будет
Re[10]: Программирование служб: подробности
От: dimchick Украина  
Дата: 26.05.04 13:56
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Здравствуйте, SergH, Вы писали:


SH>>Логично. Хуже того, этот "кто-то" может быть написан на C и использовать RTL.


SH>Имелось ввиду, что просто деинициализировать RTL, даже не завершая поток, тоже нехорошо. .

почему? мы деиницализируем свой RTL. он никак не связан с RTL системы.

у меня получалось деинициализировать RTL только если он влинкован в приложение (заюзал ф-ию _thread_data_del + _thread_data).
динамическая библиотека не экспортирует ф-ии для работы с THREAD_DATA
Re[11]: Программирование служб: подробности
От: SergH Россия  
Дата: 26.05.04 14:02
Оценка:
Здравствуйте, dimchick, Вы писали:

D>почему? мы деиницализируем свой RTL. он никак не связан с RTL системы.


Имхо, данные они хранят в TLS. Или не так? Если так, то очищаая ячейку TLS, мы деинициализируем RTL для текущего потока, независимо от того, в dll он или в статически скомпонован.

Но могу ошибаться, про TLS это я так бы сделал, как у них не знаю.
Делай что должно, и будь что будет
Re[12]: Программирование служб: подробности
От: dimchick Украина  
Дата: 26.05.04 14:25
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Здравствуйте, dimchick, Вы писали:


D>>почему? мы деиницализируем свой RTL. он никак не связан с RTL системы.


SH>Имхо, данные они хранят в TLS. Или не так? Если так, то очищаая ячейку TLS, мы деинициализируем RTL для текущего потока, независимо от того, в dll он или в статически скомпонован.


SH>Но могу ошибаться, про TLS это я так бы сделал, как у них не знаю

в tls хранится указатель на структуру
[ccode].
extern DWORD __thread _tlsindex; /* thread local storage index (tls.c) */

THREAD_DATA * _thread_data(void)
{
THREAD_DATA *p;

/* If no thread data has been allocated for this thread, allocate
* it and save a pointer to it in the thread local storage block.
*/
if ((p = (THREAD_DATA *)_tlsindex) == NULL)
{
p = _thread_data_new();
_tlsindex = (DWORD)p;
}
return p;
}
[/code]
Re[13]: Программирование служб: подробности
От: SergH Россия  
Дата: 26.05.04 14:27
Оценка:
Здравствуйте, dimchick, Вы писали:

DD>в tls хранится указатель на структуру


Ну я это и имел ввиду, понятно, что 80 байт туда пихать — плохой вариант.
Делай что должно, и будь что будет
Re[12]: Программирование служб: подробности
От: dimchick Украина  
Дата: 26.05.04 14:27
Оценка:
как бы получить доступ к этой ячейке
Re[12]: Программирование служб: подробности
От: SergH Россия  
Дата: 26.05.04 14:29
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Имхо, данные они хранят в TLS. Или не так? Если так, то очищаая ячейку TLS, мы деинициализируем RTL для текущего потока, независимо от того, в dll он или в статически скомпонован.


Сорри, понял свою ошибку. У разных RTL будут разные ячейки.
Делай что должно, и будь что будет
Re[13]: Программирование служб: подробности
От: dimchick Украина  
Дата: 26.05.04 14:38
Оценка:
процедура удаления немного сложная в реализации
void _thread_data_del(THREAD_DATA *t)
{
    _lock(thread_lock,"locking thread data (del)");

    /* Place the block on the free list for re-use later */
    t->thread_link = free_list;
    free_list = t;

    _unlock(thread_lock,"unlocking thread data (del)");
}

нужно получить доступ к _lock_nt и free_list.

зы. чувствую что проще забить
Re: Программирование служб: подробности
От: Аноним  
Дата: 10.06.05 08:38
Оценка:
Здравствуйте, Сергей Холодилов, Вы писали:

СХ>Статья:

СХ>Программирование служб: подробности
Автор(ы): Сергей Холодилов
Дата: 22.06.2003
В статье описаны некоторые детали программирования служб Windows NT/2000/XP. Большая часть содержащихся в статье утверждений описывает реакцию Windows на какие-то действия службы. Если вы написали первую службу и хотите двигаться дальше, эта статья вам поможет.


СХ>Авторы:

СХ> Сергей Холодилов

СХ>Аннотация:

СХ>В статье описаны некоторые детали программирования служб Windows NT/2000/XP. Большая часть содержащихся в статье утверждений описывает реакцию Windows на какие-то действия службы. Если вы написали первую службу и хотите двигаться дальше, эта статья вам поможет.

А каким образом заставить сервисв примере работать в SafeMode 2000/XP?
Re: Программирование служб: подробности
От: Maksim24  
Дата: 19.08.06 12:28
Оценка:
Здравствуйте, Сергей Холодилов, Вы писали:

СХ>Статья:

СХ>Программирование служб: подробности
Автор(ы): Сергей Холодилов
Дата: 22.06.2003
В статье описаны некоторые детали программирования служб Windows NT/2000/XP. Большая часть содержащихся в статье утверждений описывает реакцию Windows на какие-то действия службы. Если вы написали первую службу и хотите двигаться дальше, эта статья вам поможет.


СХ>Авторы:

СХ> Сергей Холодилов

СХ>Аннотация:

СХ>В статье описаны некоторые детали программирования служб Windows NT/2000/XP. Большая часть содержащихся в статье утверждений описывает реакцию Windows на какие-то действия службы. Если вы написали первую службу и хотите двигаться дальше, эта статья вам поможет.

Здравствуйте,
Вопрос: при удалении службы, удаляется и ключ реестра хранения MyServiceEventSource, а как же быть с dll которая занята процессом EvengLog?
Re: Программирование служб: подробности
От: cod3r_200  
Дата: 20.08.06 07:30
Оценка:
Здравствуйте, Сергей Холодилов, Вы писали:

СХ>Статья:

СХ>Программирование служб: подробности
Автор(ы): Сергей Холодилов
Дата: 22.06.2003
В статье описаны некоторые детали программирования служб Windows NT/2000/XP. Большая часть содержащихся в статье утверждений описывает реакцию Windows на какие-то действия службы. Если вы написали первую службу и хотите двигаться дальше, эта статья вам поможет.


СХ>Авторы:

СХ> Сергей Холодилов

СХ>Аннотация:

СХ>В статье описаны некоторые детали программирования служб Windows NT/2000/XP. Большая часть содержащихся в статье утверждений описывает реакцию Windows на какие-то действия службы. Если вы написали первую службу и хотите двигаться дальше, эта статья вам поможет.

Отличная статья. Я Написал сервис на основе этой статьи (простенький тсп-сервер), только затруднение вызвала ф-ция ServiceMain, пропару в ней допустил, флажок один не указал. Не хотелось тупо передирать из статьи, х0телось понять как работает. Вобщем всё ясно с сервисами, во время действий ни одно животное не пострадало % ) Комп перегружал раз 30. Там фишка, что не удалишь сервис, пока комп не перегрузишь, если неправильно что-то сделал в службе.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Службы: под Win 2003 не идет
От: potap  
Дата: 28.06.07 12:05
Оценка:
А как насчет Window Server 2003?
Ни serv, ни serv_tiny не запустились Пишут ошибка 5 — access denied.
Правда, если я их запускаю не под Local System, а под конкретным именем, то запускаются. В чем может быть дело? Заранее спасибо за ответ.
Re[2]: Службы: под Win 2003 не идет
От: -Naruto- Ниоткуда  
Дата: 28.06.07 16:42
Оценка: -1
Это еще не все особенности...
Во первых в Win2003 в SericeMain не передаются параметры и второе — не устанавливается текущим фолдер откуда было запущено приложение, а остается в System32 — откуда запускается ServiceManager.

Re[3]: Службы: под Win 2003 не идет
От: Andrew S Россия http://alchemy-lab.com
Дата: 28.06.07 22:25
Оценка:
N>Это еще не все особенности...
N>Во первых в Win2003 в SericeMain не передаются параметры и второе — не устанавливается текущим фолдер откуда было запущено приложение, а остается в System32 — откуда запускается ServiceManager.

Параметры передаются, только что проверил. А system32 на всех системах для служб устанавливается как текущая папка. В общем, зачем народ зря пугаете, а?

2potap — используйте SFL для построения служб. Все нормально запускается.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[4]: Службы: под Win 2003 не идет
От: potap  
Дата: 29.06.07 06:45
Оценка:
Спасибо за ответы.

1) А что такое SFL? Где о нём почитать?
2) Так я не понял, приложенные к статье сервисы только у меня не запускаются или у всех на Win 2003 под Local System? Как их (или настройки винды) подправить, чтобы запускались?


Здравствуйте, Andrew S, Вы писали:

N>>Это еще не все особенности...

N>>Во первых в Win2003 в SericeMain не передаются параметры и второе — не устанавливается текущим фолдер откуда было запущено приложение, а остается в System32 — откуда запускается ServiceManager.

AS>Параметры передаются, только что проверил. А system32 на всех системах для служб устанавливается как текущая папка. В общем, зачем народ зря пугаете, а?


AS>2potap — используйте SFL для построения служб. Все нормально запускается.
Re[5]: Службы: под Win 2003 не идет
От: Andrew S Россия http://alchemy-lab.com
Дата: 29.06.07 07:47
Оценка: 2 (1)
P>Спасибо за ответы.

P>1) А что такое SFL? Где о нём почитать?

В "Исходниках".

P>2) Так я не понял, приложенные к статье сервисы только у меня не запускаются или у всех на Win 2003 под Local System? Как их (или настройки винды) подправить, чтобы запускались?


Не знаю, меня эти сервисы не интересовали. Попробуйте устанавливать эти сервисы при помощи sc.exe, а не встроенными инсталляторами. Встроенные инсталляторы, вообще говоря, не совсем удачны.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: Службы: под Win 2003 не идет
От: SergH Россия  
Дата: 29.06.07 07:52
Оценка:
Здравствуйте, potap, Вы писали:

P>А как насчет Window Server 2003?

P>Ни serv, ни serv_tiny не запустились Пишут ошибка 5 — access denied.
P>Правда, если я их запускаю не под Local System, а под конкретным именем, то запускаются. В чем может быть дело?

Сорри, под рукой нету 2003-й. Найду — посмотрю. Когда статья писалась такой системы ещё не существовало
Делай что должно, и будь что будет
Re[6]: Службы: под Win 2003 не идет
От: SergH Россия  
Дата: 29.06.07 07:53
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS> Попробуйте устанавливать эти сервисы при помощи sc.exe, а не встроенными инсталляторами. Встроенные инсталляторы, вообще говоря, не совсем удачны.


Что подразумевается под "встроенными инсталляторами"? Почему неудачны?
Делай что должно, и будь что будет
Re[5]: Службы: под Win 2003 не идет
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 29.06.07 07:58
Оценка: 2 (1)
Здравствуйте, potap, Вы писали:

P>1) А что такое SFL? Где о нём почитать?


http://rsdn.ru/article/baseserv/sfl.xml
Автор(ы): Igor Vartanov
Дата: 14.03.2005
В переписке с одним из членов RSDN Team я как-то неосторожно заявил, что не пишу сервисы направо и налево, подразумевая, что пишу я их очень редко. Да, я ошибался. Случилось так, что я был вынужден за достаточно короткий срок написать несколько сервисов – сначала один, и затем, спустя совсем небольшое время, еще парочку. Приступив к написанию второго, я вдруг почувствовал острое ощущение бессмысленности траты времени на тупое копирование типового кода. А впереди ведь ожидал еще и третий проект… Поэтому работа над вторым сервисом была отложена в сторону (по принципу «лучше день потерять, зато потом за пять минут долететь»), и был написан код, впоследствии легший в основу SFL.


P>2) Так я не понял, приложенные к статье сервисы только у меня не запускаются или у всех на Win 2003 под Local System? Как их (или настройки винды) подправить, чтобы запускались?


попробовал serv_tiny (ShutdownCounter) на win2003 sp2 — установился, под Local System запускается
... << RSDN@Home 1.2.0 alpha rev. 694>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.