| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Запуск приложения из сервиса |
| Автор: this 6.1.2006, 15:43 | ||
| Здравствуйте, Есть код:
то есть при запуске сервис запускает пиложение. Но если сервис запускается при старте системы, то приложение не появляется, хотя его процесс виден в TaskManager. Хотя если я запускаю сервис вручную, то все нормально. Подскажите, в чем дело? |
| Автор: _hunter 6.1.2006, 16:00 |
| десктопа в то время нет. вот и не показывается оно. |
| Автор: this 6.1.2006, 16:05 | ||
А как же можно это сделать? |
| Автор: bems 6.1.2006, 16:13 |
| SetThreadDesktop или CreateProcessAsUser "или" означает, что первое может не помочь Добавлено @ 16:13 Кстати, где ты взял TService? |
| Автор: this 6.1.2006, 16:19 | ||
Так в Delphi же есть тип проекта ServiceApplication. |
| Автор: _hunter 6.1.2006, 16:24 | ||
сделать что? запустить, чтобы видно было? дождаться появления рабочего стола. а лучше фигней не заниматься: нужно чтобы Explorer приложение запустил -- засунь его ( приложение ) в авторан |
| Автор: this 6.1.2006, 16:30 | ||||
Мне нужно, чтобы приложение было запущено при старте системы но в авторане нельзя чтобы его было видно |
| Автор: bems 6.1.2006, 16:37 |
| Службы тоже видно. Если хочешь хорошо спрятаться, перехватывай API. На фориме и топик где-то был вроде. |
| Автор: this 6.1.2006, 16:43 |
| Как спрятать процесс я уже нашел http://soft32.ru/delphi.shtml?topic=os&title=app_xp_hide, но дело в том если окно не появляется, то и процесс не прячется. А можно как-нибудь программно заставить Explorer запускать мою прогу, но чтобы в авторане её не было? А как например это делает ICQ ведь в авторане его нету? |
| Автор: _hunter 6.1.2006, 16:52 |
| она есть в авторане из реестра + если у тебя есть сервис -- зачем запускать еще какую-то программу? |
| Автор: this 6.1.2006, 17:10 | ||
Ну дело в том что сервис почему-то не прячется таким образом. |
| Автор: bems 6.1.2006, 17:20 | ||||
| Опиши ситуацию поподробнее. Например зачем тебе сервис? Если только чтобы спрятаться - идея плохая. Попробуй написать библиотечку под winlogon
И в реестр импортируй что-то такое:
Получаешь свой код, который работает в контексте Winlogon. Процесса нет. Если нужно окно и тд, создаешь поток, вызываешь для него SetThreadDesktop и вперед! |
| Автор: bems 6.1.2006, 19:45 |
| 1. В WLX_NOTIFICATION_INFO winlogon сообщает текущий рабочий стол, имя пользователя, его Token, рабочую станцию, имя домена. Если тебя это все не интерисует, то в заголовке обработчиков поставь тупо какой-то указатель (и убери var). Структура описана в SDK 2003 (есть в комплекте с delphi2005). 2. "UserSpy.dll" - имя библиотеки. Можешь заменить на свое, только не забудь исправить и в реестре тоже. Я этот кусок выдернул из своего проекта, там библиотека называется так. 3. Опишу ключи реестра, обработчики среди них тоже Asynchronous"=dword:00000000 если 0 то winlogon вызывает обработчики синхронно (пока не отработает winlogon дольше не двинеться, если 1 то все в отдельном потоке) "Lock"="LockHandler" - юзер вышел не закрывая програм. (кнопочка с двумя стрелками "смена пользователя") "Logoff"="LogOffHandler" юзер совсем вышел "Logon"="LogOnHandler" юзер вошел с нуля "Unlock"="UnlockHandler" юзер вернулся "StartShell"="StartShellHandler" - запуск оболочки(explorer) После LogOnHandler но до появления рабочего стола. "Startup"="StartupHandler" - тачка загружена есть и еще, но их я не использовал С отладкой будут проблемы. Библиотека загружена пока жив винлогон, если убить винлогон погибнет винда. Если выдаешь отладочные сообщения, они появляются на десктопе винлогона. Вобщем в процессе приходится выкручиваться, но в результате все очень удобно. |
| Автор: this 6.1.2006, 19:52 |
| Большое тебе спасибо, bems - это то что надо. Но еще один ворпрос - а как на такое реагируют антивирусники? |
| Автор: bems 6.1.2006, 20:21 |
| Нормально отреагируют - эта возможность предусмотрена в винлогоне, значит все путем. Но все эти ключи в реестре все равно видно, и некоторые программы (например autoruns с SysInternals.com) их выводят, как элементы автозапуска |
| Автор: Dedka 7.6.2011, 13:42 |
| Здравствуйте! Тоже вопрос по запуску приложения из службы. Использую CreateProcessAsUser, тестирую на Windows Server 2008. Естественно при запуске службы до входа пользователя в систему она запускается в сессии 0. Реально до входа в систему получить Token сессии 1? Кто-нибудь знает каким образом системные службы ( SMSS.EXE, CSRSS.EXE) запускают процессы в сессии 1? |