Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];

Вниз

Как узнать кем стартуется сервис...   Найти похожие ветки 

 
sniknik ©   (2008-08-28 13:30) [0]

Смысл, нужно в сервисе точно знать запущен он человеком (из менеджера служб либо другой программой) или системой при старте компа (стоит тип запуска Auto). Т.е. нужно отловить вот этот автостарт.
Есть какие нибудь особенности/методы которые позволили бы это сделать?

Если нет, то придется ориентироваться на GetTickCount, т.е. на время запуска от начала работы системы. Что не надежно, мало ли какие задержки при старте возникнут и дойдет до нужной службы, или человек случайно попадет в период когда "тики" сбрасываются, раз в 49 дней вроде... получится вроде система запустила. Ненадежно в общем так получается, пусть вероятность и маленькая.


 
Vlad Oshin ©   (2008-08-28 13:45) [1]

может там что есть
http://forum.sources.ru/index.php?showtopic=209024


 
Медвежонок Пятачок ©   (2008-08-28 14:22) [2]

если у сервиса автостарт но во время запуска есть рабочий стол, то это явно запуск не из-за автостарта


 
Leonid Troyanovsky ©   (2008-08-28 14:26) [3]


> sniknik ©   (28.08.08 13:30)

> при старте компа (стоит тип запуска Auto). Т.е. нужно отловить
> вот этот автостарт.

http://rsdn.ru/?article/baseserv/svcadmin-1.xml
См. BootVerificationProgram

--
Regards, LVT.


 
sniknik ©   (2008-08-28 14:28) [4]

> может там что есть
Проверил, при старте компа хендл родителя процесса - 572, что характерно при старте мной службы из менеджера он тот же - 572.

> если у сервиса автостарт но во время запуска есть рабочий стол, то это явно запуск не из-за автостарта
Тоже ненадежно, имхо, в ХР уже и рабочий стол есть и проги могут запускаться а службы все еще подгружаются...


 
Медвежонок Пятачок ©   (2008-08-28 14:30) [5]

а для чего это знать?
может есть иной путь?


 
DVM ©   (2008-08-28 14:41) [6]

имхо это невозможно


 
Плохиш ©   (2008-08-28 14:45) [7]


> Проверил, при старте компа хендл родителя процесса - 572,
>  что характерно при старте мной службы из менеджера он тот
> же - 572.

А какая разница кто процесс запускает, если у него в настройках стоит "залогиниться под определённой учётной записью"?


 
sniknik ©   (2008-08-28 14:46) [8]

> См. BootVerificationProgram
Подходит, только с изменением/усложнением логики... желательно бы без дополнительных программ/взаимодействий. Непосредственно в самом сервисе.

> а для чего это знать?
Сервис мониторит состояние машины (не всю конечно, некоторые наши программы/железки), так вот рестарт машины это один из факторов которые желательно отловить. Доступа к самой машине нет, инфа после/в процессе(как получится) скидывается по http на сервер. Вот сервер доступен полностью, но... он и не перезагружается.


 
sniknik ©   (2008-08-28 14:48) [9]

> А какая разница кто процесс запускает, если у него в настройках стоит "залогиниться под определённой учётной записью"?
В том то и проблема, получается никакой, а разделить нужно (вернее не так разделить, как определить при старте запуск или после)


 
Медвежонок Пятачок ©   (2008-08-28 14:52) [10]

так а в евентлог если заглянуть ?


 
sniknik ©   (2008-08-28 14:53) [11]

> А какая разница кто процесс запускает
Это была проверка идеи из Vlad Oshin ©   (28.08.08 13:45) [1], на возможность запуска от разных процессов.


 
sniknik ©   (2008-08-28 14:56) [12]

> так а в евентлог если заглянуть ?
И что это даст? (Предположим, что доступ к машине имеется.) Чем поможет заглянуть туда потом для знания в момент запуска службы?


 
Медвежонок Пятачок ©   (2008-08-28 15:07) [13]

Если в нем логировать события ребута/загрузки, то можно получить время загрузки


 
sniknik ©   (2008-08-28 16:39) [14]

> Если в нем логировать события ребута/загрузки, то можно получить время загрузки
Т.е. постоянно генерить туда события и после анализировать, по отсутствию/началу судить что произошло? Не пойдет, нужно не после, а  во время...

Итого:
Самый подходящий вариант, имхо, это -> [3], либо что-то подобное сделанное самостоятельно, например второй сервис который руками не запускается в принципе, вроде есть такое, тип драйвер, они стартуют раньше обычных, его единственным делом будет "взвести флаг" и завершится (атом к примеру, он от процесса не зависит, останется даже после завершения), в своем сервисе проверить флаг и удалить его. Т.к. первый руками не запустить флаг будет показателем. Теоретически будет работать...

Но в общем поздно :)... уже сделал на GetTickCount, попроще,  и отослал. Т.что продолжать если только ради интереса, а менять уже не будут (еще раз человека в командировку ради мизерных вероятностей неправильного события... не, мне нужность этого не доказать :).


 
sniknik ©   (2008-08-28 23:55) [15]

Блин, вот меня "перемкнуло" то... решение же очевидное, в [14] уже почти оно, чуток только не конца.
Не нужно никаких дополнительных сервисов, только проверка "атома" в основном, и обратным условием, не как в [14], т.е. при старте проверяем нет атома + тип старта "астостарт" (руками не переставили на ручное) = запуск при старте системы, дальше создаем атом, и если после будут ручные перестартовки сервис его  найдет -> запуск как минимум второй, т.е. "ручной" а не системный.
Т.е. все просто. Жаль что уже "поезд ушел", в прямом и переносном смысле... нужно будет уточнить насчет интернета, говорили нет там его.

p.s. надо больше отдыхать, на работе мозги совсем не варят... а вот стоило отдохнуть, фильм посмотреть, в дьяблу "оттянуться" и пожалуйста, считай само собой. ;)


 
DiamondShark ©   (2008-08-29 14:13) [16]


> sniknik ©   (28.08.08 23:55) [15]

Остановили сервис руками. Поменяли учётную запись для запуска службы. Запустили руками.

Атома нет, потому что у сервиса другая винстанция.


 
sniknik ©   (2008-08-29 15:24) [17]

Со сменой учетки да, думал уже, поэтому пришлось время третьим параметром проверки оставить. Т.что если успеют за пять мин, с начала старта винды (или в период после 49 дней) это провернуть... то будет дубль автостарта.
Гарантировано не не получилось. ;( Просто вероятность стала еще меньше. Но думаю и так пойдет. Наворачивать какихто сложных схем, ради записи в логе, не хочется. Другое дело если кто знает чтото такое, что "просто и со вкусом"(и с гарантией) тогда есть смысл менять.


 
sniknik ©   (2008-08-29 15:30) [18]

> то будет дубль автостарта.
А если вдруг комп на старте подвиснет > 5 мин до нее, то наоборот неправильный "ручной" запуск (служба без зависимостей не должно быть такого. но всетаки). Смирился... фиг с ним пусть будет.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.052 c
2-1251091182
Interesting
2009-08-24 09:19
2009.10.25
Как возвести число в степень?


15-1251061714
syte_ser78
2009-08-24 01:08
2009.10.25
что является шлюзом?


2-1250979749
Риг
2009-08-23 02:22
2009.10.25
Объекты в потоках.


15-1251192191
_Андрей
2009-08-25 13:23
2009.10.25
слабый сигнал?


2-1251100957
@!!ex
2009-08-24 12:02
2009.10.25
Как проще всего сделать Wizard?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский