![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
ZBugz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
Так, погодите... У меня уже голова кругом пошла, пока Вас читал, 95% информации не понял
![]() И так по порядку.... Есть windows 2008R2 Там есть моя программка, она в атозапуске. Пользователи: Администратор и гость. Когда выключают свет, к примеру, и комп перезагружается, и некому зайти под любым из пользователей, то программа не запускается. Вот мне и надо, что бы ее запустил сервис. Ну как в антивирусе или файрволе... GUI в сервис конечно я не перенесу, там программа большая. Мне старта моей хватит и остлеживание ее на наличие запущенности... Желательно (начитался Ваших диcскусий), мне бы пример, с сервисом, в котором можно указат пользователя и пароль из под которого он запустится и если их не указывать, то что бы по умолчанию он запускался из под LOCALSYSTEM ![]() З.Ы. Никаких там RDP или для Sql или использовать планировщик или еще чего либо, мне не надо, чисто локальный пользователь... Это сообщение отредактировал(а) ZBugz - 9.8.2014, 06:51 |
|||
|
||||
drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
но если есть желание приобрести мешочек геморроя, то ссылка на пример выше -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
kami |
|
||||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 23 Всего: 72 |
Пардон, но этот путь задали Вы. Изначально меня смутило Ваше заявление о возможности доступа к десктопу из сервиса. Еще раз подчеркну - из сервиса, о чем Вы неоднократно (в том числе в ехидных фразах) утверждали. Именно поэтому я и пытался расставить все точки над i - по прежнему ли нельзя (так было, когда пытался заниматься этим вопросом), то ли ситуация поменялась, а я не в курсе.
О том, что есть свет в конце тоннеля - с чувством полного превосходства сказали Вы. Печально, что в конечном итоге это оказалось не так. Я бы с огромной радостью посыпал голову пеплом и пошел перечитывать мануалы.
Углубиться можно. Но это не поможет - WinSta останется в той же сессии, о чем я уже говорил. А зря. Смысл не в упоминании десктопа в lpDesktop, а именно в манипуляциях с hToken. Судя по этому, десктоп можно не указывать.
Так именно об этом речь и шла изначально, и проблем с этим по большому счету нет. Пример Rouse я посмотрел практически сразу после его упоминания, но там так же используется запуск отдельного процесса. Ни о каком SetThreadDesktop для потока сервиса речи не идет. Возвращаясь к исходному вопросу: ZBugz, что мешает обойтись не программерскими, а административными методами решения? Например, Autologon. При включении компьютера сразу будет залогинен пользователь и будет запущено то, что указано в его автозапуске. quod erat demonstrandum
Ну, а если все равно нужен сервис, да и в добавок логин/пароль известны - воспользуйтесь CreateProcessWithLogonW. Вы попробуйте, там нечему не-получаться ![]() |
||||||||
|
|||||||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 23 Всего: 72 |
Да никто не переключится. НЕВОЗМОЖНО это. Программа так и останется висеть на десктопе сервисов. Сейчас для подтверждения своего мнения провел несколько экспериментов - да, приложения запускаются через планировщик. Да, они есть в процессах, НО ProcessExplorer говорит, что запущен от имени нужного пользователя... вот только в сесии 0 (LocalSystem) и WindowStations\Service-0x0-24012. Планировщик - не выход. |
|||
|
||||
drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
kami, у нас как-то диалог глухого с немым получился... ну да ладно, не суть
Вы останетесь при своём, и я при своем, так что не о чем спорить... А то, что Вы хотите сделать можно, но это не тривиально и для большинства задач не есть рациональное решение. ню-ню -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
ZBugz |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
Не, люблю все сам ![]()
Вот пример бы ![]() |
||||
|
|||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 23 Всего: 72 |
Честно говоря - даже не знаю, как построить пример, чтобы он не стал непосредственным решением задачи ![]() В общем и целом: нужно создать новый проект - сервис, а в OnExecute выполнить единственное мероприятие - CreateProcessWthLogon. А если программа продолжает оставаться в автозагрузке - то LogonUser. Вы попробуйте, а с тем что не получится (хотя я не понимаю, что там может не получиться) - сюда. drkot, все-таки я настоятельно прошу доказательств Вашей точки зрения, раз уж Вы продолжаете настаивать на том, что это возможно.
Какие бы ни были извращения при "стыковке" своего потока с интерактивным рабочим столом - оно в любом случае окупится тем, что не будет необходимости использовать IPC. Механизмы синхронизации "своих" потоков гораздо проще в применении. Пусть это будет нетривиально, пусть с извращениями - главное чтобы было. Повторно прошу: пример, ссылку - что угодно, реализующее взаимодействие с рабочим столом пользователя из потока, принадлежащего сервису. Опять это бездоказательное "я знаю и умею, а вы, серые, продолжайте упорствовать в своем невежестве". Я дождусь подтверждения ваших слов, или это так и останется на уровне ОБС? Это сообщение отредактировал(а) kami - 10.8.2014, 14:16 |
|||
|
||||
drkot |
|
||||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
Данные извращения сводятся к переписыванию системной области процесса требует отключения защитных механизмов системы. К делфи не имеет никакого отношени. После прикрытия "интерактивных" сервисов копал именно в этом направлении. Выяснилось, что для нормальной работы на произвольной машине добиться не получится. Насколько понимаю делает что-то очень подобное, но ей "разрешено", а другим нет. Какие конкретно права и привилегии имеет эта служба не изучал. Для себя решил, что "интерактивных" сервисов быть не должно и точка. Если сервисом надо управлять, то делается десктопное приложение через которое управляется (настройки, телеметрия). Но никаких диалоговых окон из сервиса быть не должно, никаких ожиданий ответа от пользователя и прочего. Если хочется развлечься, то это Ваше право. Есть еще два варианта: 1) регистрируется COM сервер (или расширение оболочки) и через него открываются окна; 2) запустить сервис в контексте текущего пользователя Проверять не пробовал, это заметки с того времени.
нет, это скорее "чем Вам планировщик не угодил?". ZBugz, лучшее решение то, которое самое простое... -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
||||
|
|||||
ZBugz |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
А вот , к прмеру, касперский или outpost firewall, они работают даже, когда компьютер ен залогинен. Или бэкапер cobian backup, тот же, там в нем прописываешь под авторизироватся и все, он сам шурует, даже если не залогинишься в windows... Мне как раз как у них надо... ![]()
Согласен, поэтому и хочу сам написать, я считаю это самым простым ![]() Это сообщение отредактировал(а) ZBugz - 10.8.2014, 19:15 |
||||
|
|||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 23 Всего: 72 |
Ага. Пока не залогинен - "шурует" сервис. Когда залогинен - сервис запускает GUI процесс под "залогиненным" пользователем, но "шуровать" продолжает все равно сервис. А гуй - всего-навсего представляет собой прослойку между пользователем и сервисом. Эта прослойка показывает информацию от сервиса - пользователю и отправляет в сервис команды, отданные пользователем. Вы уверены, что теперь надо именно это? |
|||
|
||||
ZBugz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
Неверно ![]() Хочу как у других... Пока не залогиен, запускается сервис, который стартует мою программу. Как юзер залогинился, программа уже и так запущена, тогда два варианта (не знаю что лучше и как реализовать хотя бы один): 1. Так что ее не трогаем... Но все равно каждые 5 секунд проверяет ее запущенность, елси не запущенная, то запускает ее. Если я закрываю комманду, то посылаю комманду сервису, который выключает таймер проверки запуска программы... 2. Выгружаем программу и срабатывает обычный автозапуск, который уже написан. |
|||
|
||||
Delvish |
|
|||
![]() oO ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 13.12.2006 Репутация: 1 Всего: 4 |
Раз уж так хочется именно через сервис, то у Rouse_ есть хороший пример взаимодействия сервиса с рабочим столом пользователя
|
|||
|
||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 23 Всего: 72 |
Вы мне напоминаете 90+% заказчиков - они все хотят "чтобы было красиво", но вот что означает это "красиво" - никто объяснить не может. И когда пытаешься отдать им решение, начинается "ну, да, это конечно классно, но совсем не то что мне надо" (да, еще достаточно много народа признает только waterfall). Давайте полностью проговорим алгоритм работы. "После загрузки компьютера запускается наша служба, которая..." А дальше всё зависит от первой части. Но я не понимаю, чем плох авто-логон юзера, пусть даже сделанный из своего сервиса. |
|||
|
||||
kami |
|
||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 23 Всего: 72 |
Update:
Ок, программа стартанула. Но если ручками не залогинить пользователя до запуска приложения - вы не увидите его GUI. Хотя... у меня не было необходимости в использовании CreateProcessWithLogonW, посему - может и "прокатит".
Это - 2 под-задачи - а)получение списка процессов б)запуск своего от имени пользователя. Первая более чем широко описана, решение по второй предлагалось здесь во многих постах, включая пример Rouse, упомянутый drkot и Delvish.
Реализовывать можно по разному, смотря кто будет проверять на второй запуск. В любом случае - потребуется взаимодействие двух приложений. Так чего же вам не хватает, чтобы начать решать эту задачу? Это сообщение отредактировал(а) kami - 12.8.2014, 13:28 |
||||||
|
|||||||
Delvish |
|
|||
![]() oO ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 13.12.2006 Репутация: 1 Всего: 4 |
Оу, что-то я проглядел что drkot уже давал ссылку на Багеля. Зато я припомнил старую очень похожую тему, которую некогда встречал... kami, ваш же пост
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |