-
Смысл, нужно в сервисе точно знать запущен он человеком (из менеджера служб либо другой программой) или системой при старте компа (стоит тип запуска Auto). Т.е. нужно отловить вот этот автостарт. Есть какие нибудь особенности/методы которые позволили бы это сделать?
Если нет, то придется ориентироваться на GetTickCount, т.е. на время запуска от начала работы системы. Что не надежно, мало ли какие задержки при старте возникнут и дойдет до нужной службы, или человек случайно попадет в период когда "тики" сбрасываются, раз в 49 дней вроде... получится вроде система запустила. Ненадежно в общем так получается, пусть вероятность и маленькая.
-
-
если у сервиса автостарт но во время запуска есть рабочий стол, то это явно запуск не из-за автостарта
-
-
> может там что есть Проверил, при старте компа хендл родителя процесса - 572, что характерно при старте мной службы из менеджера он тот же - 572.
> если у сервиса автостарт но во время запуска есть рабочий стол, то это явно запуск не из-за автостарта Тоже ненадежно, имхо, в ХР уже и рабочий стол есть и проги могут запускаться а службы все еще подгружаются...
-
а для чего это знать? может есть иной путь?
-
имхо это невозможно
-
> Проверил, при старте компа хендл родителя процесса - 572, > что характерно при старте мной службы из менеджера он тот > же - 572.
А какая разница кто процесс запускает, если у него в настройках стоит "залогиниться под определённой учётной записью"?
-
> См. BootVerificationProgram Подходит, только с изменением/усложнением логики... желательно бы без дополнительных программ/взаимодействий. Непосредственно в самом сервисе.
> а для чего это знать? Сервис мониторит состояние машины (не всю конечно, некоторые наши программы/железки), так вот рестарт машины это один из факторов которые желательно отловить. Доступа к самой машине нет, инфа после/в процессе(как получится) скидывается по http на сервер. Вот сервер доступен полностью, но... он и не перезагружается.
-
> А какая разница кто процесс запускает, если у него в настройках стоит "залогиниться под определённой учётной записью"? В том то и проблема, получается никакой, а разделить нужно (вернее не так разделить, как определить при старте запуск или после)
-
так а в евентлог если заглянуть ?
-
> А какая разница кто процесс запускает Это была проверка идеи из Vlad Oshin © (28.08.08 13:45) [1], на возможность запуска от разных процессов.
-
> так а в евентлог если заглянуть ? И что это даст? (Предположим, что доступ к машине имеется.) Чем поможет заглянуть туда потом для знания в момент запуска службы?
-
Если в нем логировать события ребута/загрузки, то можно получить время загрузки
-
> Если в нем логировать события ребута/загрузки, то можно получить время загрузки Т.е. постоянно генерить туда события и после анализировать, по отсутствию/началу судить что произошло? Не пойдет, нужно не после, а во время...
Итого: Самый подходящий вариант, имхо, это -> [3], либо что-то подобное сделанное самостоятельно, например второй сервис который руками не запускается в принципе, вроде есть такое, тип драйвер, они стартуют раньше обычных, его единственным делом будет "взвести флаг" и завершится (атом к примеру, он от процесса не зависит, останется даже после завершения), в своем сервисе проверить флаг и удалить его. Т.к. первый руками не запустить флаг будет показателем. Теоретически будет работать...
Но в общем поздно :)... уже сделал на GetTickCount, попроще, и отослал. Т.что продолжать если только ради интереса, а менять уже не будут (еще раз человека в командировку ради мизерных вероятностей неправильного события... не, мне нужность этого не доказать :).
-
Блин, вот меня "перемкнуло" то... решение же очевидное, в [14] уже почти оно, чуток только не конца. Не нужно никаких дополнительных сервисов, только проверка "атома" в основном, и обратным условием, не как в [14], т.е. при старте проверяем нет атома + тип старта "астостарт" (руками не переставили на ручное) = запуск при старте системы, дальше создаем атом, и если после будут ручные перестартовки сервис его найдет -> запуск как минимум второй, т.е. "ручной" а не системный. Т.е. все просто. Жаль что уже "поезд ушел", в прямом и переносном смысле... нужно будет уточнить насчет интернета, говорили нет там его.
p.s. надо больше отдыхать, на работе мозги совсем не варят... а вот стоило отдохнуть, фильм посмотреть, в дьяблу "оттянуться" и пожалуйста, считай само собой. ;)
-
> sniknik © (28.08.08 23:55) [15]
Остановили сервис руками. Поменяли учётную запись для запуска службы. Запустили руками.
Атома нет, потому что у сервиса другая винстанция.
-
Со сменой учетки да, думал уже, поэтому пришлось время третьим параметром проверки оставить. Т.что если успеют за пять мин, с начала старта винды (или в период после 49 дней) это провернуть... то будет дубль автостарта. Гарантировано не не получилось. ;( Просто вероятность стала еще меньше. Но думаю и так пойдет. Наворачивать какихто сложных схем, ради записи в логе, не хочется. Другое дело если кто знает чтото такое, что "просто и со вкусом"(и с гарантией) тогда есть смысл менять.
-
> то будет дубль автостарта. А если вдруг комп на старте подвиснет > 5 мин до нее, то наоборот неправильный "ручной" запуск (служба без зависимостей не должно быть такого. но всетаки). Смирился... фиг с ним пусть будет.
|