Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > Порядок загрузки сервисов |
Автор: Sheff 24.11.2007, 00:26 |
Всем привет! Столкнулся с вот какой проблемой: есть сервис, запускающийся автоматом при старте системы, зависящий от сервиса winmgmt (т.е от WMI). Задача - заставить мой сервис запускаться до входа какого-либо юзера в систему. Понятно, что до winlogon'а у меня загрузиться не получится, т.к все сервисы грузятся после его запуска (согласно Русиновичу), но хотелось бы загрузить свой сервис как можно скорее, так чтобы он уже работал, когда юзер зайдёт в свой аккаунт. Сейчас ситуация следующая: если немного подождать на экране выбора пользователя, а потом зайти в систему под каким-либо юзером, то сервис оказывается запущеннным, но если действовать быстро, т.е как только появляется экран выбора юзера сразу же кликнуть по какому-нибудь, то оказывается, что мой сервис ещё не запущен и запускается он через секунд так 10-15. Такого быть не должно, мне нужно чтобы сервис гарантированно уже был запущен, когда юзер попадает на свой десктоп. Как бы это сделать ? Можно конечно поместить мой сервис в какую-нибудь группу сервисов, например в "Boot" или "System", но это не подходит, т.к мой сервис использует WMI, а сервис WMI группы не имеет, поэтому запускается фиг знает когда. Конечно, можно сменить группу WMI, но это уже хак, т.к изменять жизненно важные параметры системы - последнее дело. Изменив порядок загрузки WMI ненароком можно добиться того что другие сервисы, зависящие от WMI, перестанут работать. Существует ли какое-нибудь решение моей задачи ? Какие будут предложения ? |
Автор: W4FhLF 24.11.2007, 07:44 |
Загрузка winmgmt зависит от службы RPCSS, т.е. winmgmt будет грузиться после неё. В этом ты можешь убедиться посмотрев в раздел HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\winmgmt на ключ DependOnService. Сам RPCSS принадлежит к группе COM Infrastructure, он в ней единственный сервис. Порядок загрузки по группам ты можешь посмотреть вот здесь: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder. Просто проанализируй все эти параметры, поидее тебе должны помочь параметры DependOnService и DependOnGroup. Т.е. создаёшь DependOnService со значением winmgmt и служба будет грузится сразу после winmgmt. |
Автор: Sheff 24.11.2007, 09:42 |
W4FhLF, всё это я знаю, я так и делаю, ставлю DependOnService - winmgmt, это не помогает, т.к служба конечно грузится после WMI, но сам WMI грузится довольно-таки поздно, так что до логина юзера сделать загрузку моего сервиса не получается |
Автор: W4FhLF 24.11.2007, 09:51 |
Sheff, не понимаю тогда твоей позиции. Твоя задача не позволяет грузится до того, как произойдёт логин и использовать WMI, значит что-то одно надо исключить, это ведь очевидно. |
Автор: Sheff 24.11.2007, 10:57 |
W4FhLF, наоборот, мне нужно сделать так чтобы мой сервис грузился после загрузки WMI, но до входа в десктоп, неужели это невозможно ? |
Автор: W4FhLF 24.11.2007, 12:10 |
"вход в десктоп" - какую службу ты имеешь ввиду? |
Автор: Sheff 24.11.2007, 12:12 |
W4FhLF, я имею ввиду когда юзер "кликает на иконке", т.е логинится. Вот до этого момента я обязан запустить мою службу. |
Автор: Sheff 24.11.2007, 16:20 |
W4FhLF, да про подмену джины мне известно, да вообще можно проще сделать: написать сервис ядра. Между прочим, часть этого моего сервиса как раз и есть сервис ядра, просто в проекте уже поздно что-то менять, нужно сделать так чтобы заработало через сервисы, но я подозревал что это невозможно :( W4FhLF, спасибо огромное за помощь ![]() |