Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Служба и запуск программы, Служба и запуск программы 
:(
    Опции темы
ZBugz
  Дата 9.8.2014, 06:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Так, погодите... У меня уже голова кругом пошла, пока Вас читал, 95% информации не понял  smile 
И так по порядку....
Есть windows 2008R2
Там есть моя программка, она в атозапуске. Пользователи: Администратор и гость. 
Когда выключают свет, к примеру, и комп перезагружается, и некому зайти под любым из пользователей, то программа не запускается.
Вот мне и надо, что бы ее запустил сервис.
Ну как в антивирусе или файрволе...
GUI в сервис конечно я не перенесу, там программа большая. Мне старта моей хватит и остлеживание ее на наличие запущенности...

Желательно (начитался Ваших диcскусий), мне бы пример, с сервисом, в котором можно указат пользователя и пароль из под которого он запустится и если их не указывать, то что бы по умолчанию он запускался из под LOCALSYSTEM  smile 

З.Ы. Никаких там RDP или для Sql или использовать планировщик или еще чего либо, мне не надо, чисто локальный пользователь...


Это сообщение отредактировал(а) ZBugz - 9.8.2014, 06:51
PM MAIL   Вверх
drkot
Дата 9.8.2014, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Цитата(drkot @  8.8.2014,  17:01 Найти цитируемый пост)
ZBugz, в вашем случае лучший и простейший вариант создать задачу в планировщике, указать там нужного пользователя и все. Подходящий триггер "При запуске".Пока пользователь не залогинется программа будет висеть на десктопе default пользователя system, как только появится пользователь, программа перескочит на его рабочий стол.


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


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
kami
Дата 9.8.2014, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(drkot @  8.8.2014,  22:54 Найти цитируемый пост)
Но Вы движетесь по пути, который не предполагает решения.

Пардон, но этот путь задали Вы. Изначально меня смутило Ваше заявление о возможности доступа к десктопу из сервиса. Еще раз подчеркну - из сервиса, о чем Вы неоднократно (в том числе в ехидных фразах) утверждали. Именно поэтому я и пытался расставить все точки над i - по прежнему ли нельзя (так было, когда пытался заниматься этим вопросом), то ли ситуация поменялась, а я не в курсе.
Цитата(drkot @  8.8.2014,  22:54 Найти цитируемый пост)
 Вместо того чтобы пройти в дверь, мы по старинке пытаемся пробить стену головой... ну тут каждый выбирает по себе... извольте...

О том, что есть свет в конце тоннеля - с чувством полного превосходства сказали Вы. Печально, что в конечном итоге это оказалось не так. Я бы с огромной радостью посыпал голову пеплом и пошел перечитывать мануалы. 
Цитата(drkot @  8.8.2014,  22:54 Найти цитируемый пост)
Конечно можно углубиться в права и привилегии и переключить окно с одной станции на другую, но это не тот путь...

Углубиться можно. Но это не поможет - WinSta останется в той же сессии, о чем я уже говорил.
Цитата(drkot @  8.8.2014,  22:54 Найти цитируемый пост)
в этом вопросе не могу с Вами согласится... 

А зря. Смысл не в упоминании десктопа в lpDesktop, а именно в манипуляциях с hToken. Судя по этому, десктоп можно не указывать.

Цитата(drkot @  8.8.2014,  22:54 Найти цитируемый пост)
Никто не мешает создать процесс под в нужной станции/столе, и выполнить то что нужно, при этом задав процессу права пользователя ... 

Так именно об этом речь и шла изначально, и проблем с этим по большому счету нет. Пример Rouse я посмотрел практически сразу после его упоминания, но там так же используется запуск отдельного процесса. Ни о каком SetThreadDesktop для потока сервиса речи не идет.


Возвращаясь к исходному вопросу:
ZBugz, что мешает обойтись не программерскими, а административными методами решения? Например, Autologon. При включении компьютера сразу будет залогинен пользователь и будет запущено то, что указано в его автозапуске. 

quod erat demonstrandum


Цитата(ZBugz @  9.8.2014,  06:48 Найти цитируемый пост)
 мне бы пример, с сервисом, в котором можно указат пользователя и пароль из под которого он запустится

Ну, а если все равно нужен сервис, да и в добавок логин/пароль известны -  воспользуйтесь CreateProcessWithLogonW. Вы попробуйте, там нечему не-получаться smile.
PM MAIL WWW   Вверх
kami
Дата 9.8.2014, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(drkot @  9.8.2014,  17:02 Найти цитируемый пост)
Пока пользователь не залогинется программа будет висеть на десктопе default пользователя system, как только появится пользователь, программа перескочит на его рабочий стол.

Да никто не переключится. НЕВОЗМОЖНО это. Программа так и останется висеть на десктопе сервисов. Сейчас для подтверждения своего мнения провел несколько экспериментов - да, приложения запускаются через планировщик. Да, они есть в процессах, НО ProcessExplorer говорит, что запущен от имени нужного пользователя... вот только в сесии 0 (LocalSystem) и WindowStations\Service-0x0-24012.
Планировщик - не выход.
PM MAIL WWW   Вверх
drkot
Дата 9.8.2014, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



kami, у нас как-то диалог глухого с немым получился... ну да ладно, не суть
Вы останетесь при своём, и я при своем, так что не о чем спорить...
А то, что Вы хотите сделать можно, но это не тривиально и для большинства задач не есть рациональное решение. 
Цитата(kami @  9.8.2014,  22:18 Найти цитируемый пост)
Планировщик - не выход.

ню-ню


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
ZBugz
Дата 10.8.2014, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Цитата(drkot @  8.8.2014,  22:54 Найти цитируемый пост)
Возвращаясь к исходному вопросу:
ZBugz, что мешает обойтись не программерскими, а административными методами решения? Например, Autologon. При включении компьютера сразу будет залогинен пользователь и будет запущено то, что указано в его автозапуске. 

Не, люблю все сам smile 

Цитата

Ну, а если все равно нужен сервис, да и в добавок логин/пароль известны -  воспользуйтесь CreateProcessWithLogonW. Вы попробуйте, там нечему не-получаться smile.

Вот пример бы  smile 
PM MAIL   Вверх
kami
Дата 10.8.2014, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(ZBugz @  10.8.2014,  07:15 Найти цитируемый пост)
Вот пример бы 

Честно говоря - даже не знаю, как построить пример, чтобы он не стал непосредственным решением задачи smile

В общем и целом:
нужно создать новый проект - сервис, а в OnExecute выполнить единственное мероприятие - CreateProcessWthLogon. А если программа продолжает оставаться в автозагрузке - то LogonUser.
Вы попробуйте, а с тем что не получится (хотя я не понимаю, что там может не получиться) - сюда.


drkot, все-таки я настоятельно прошу доказательств Вашей точки зрения, раз уж Вы продолжаете настаивать на том, что это возможно.
Цитата(drkot @  9.8.2014,  22:41 Найти цитируемый пост)
А то, что Вы хотите сделать можно, но это не тривиально и для большинства задач не есть рациональное решение. 

Какие бы ни были извращения при "стыковке" своего потока с интерактивным рабочим столом - оно в любом случае окупится тем, что не будет необходимости использовать IPC. Механизмы синхронизации "своих" потоков гораздо проще в применении.
Пусть это будет нетривиально, пусть с извращениями - главное чтобы было.
Повторно прошу: пример, ссылку - что угодно, реализующее взаимодействие с рабочим столом пользователя из потока, принадлежащего сервису.

Цитата(drkot @  9.8.2014,  22:41 Найти цитируемый пост)
ню-ню

Опять это бездоказательное "я знаю и умею, а вы, серые, продолжайте упорствовать в своем невежестве". 

Я дождусь подтверждения ваших слов, или это так и останется на уровне ОБС?

Это сообщение отредактировал(а) kami - 10.8.2014, 14:16
PM MAIL WWW   Вверх
drkot
Дата 10.8.2014, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Цитата(kami @  10.8.2014,  15:14 Найти цитируемый пост)
Какие бы ни были извращения при "стыковке" своего потока с интерактивным рабочим столом

Данные извращения сводятся к переписыванию системной области процесса требует отключения защитных механизмов системы. К делфи не имеет никакого отношени. После прикрытия "интерактивных" сервисов копал именно в этом направлении. Выяснилось, что для нормальной работы на произвольной машине добиться не получится.
Насколько понимаю 
Цитата(kami @  8.8.2014,  17:26 Найти цитируемый пост)
службы "Обнаружения интерактивных служб"

делает что-то очень подобное, но ей "разрешено", а другим нет. Какие конкретно права и привилегии имеет эта служба не изучал.
Для себя решил, что "интерактивных" сервисов быть не должно и точка. Если сервисом надо управлять, то делается десктопное приложение через которое управляется (настройки, телеметрия).
Но никаких диалоговых окон из сервиса быть не должно, никаких ожиданий ответа от пользователя и прочего.
Если хочется развлечься, то это Ваше право.
Есть еще два варианта: 1) регистрируется COM сервер (или расширение оболочки) и через него открываются окна; 2) запустить сервис в контексте текущего пользователя
Проверять не пробовал, это заметки с того времени.
 
Цитата(kami @  10.8.2014,  15:14 Найти цитируемый пост)
 "я знаю и умею, а вы, серые, продолжайте упорствовать в своем невежестве"

нет, это скорее "чем Вам планировщик не угодил?". 

ZBugz, лучшее решение то, которое самое простое... 


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
ZBugz
Дата 10.8.2014, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Цитата(kami @ 10.8.2014,  14:14)

Честно говоря - даже не знаю, как построить пример, чтобы он не стал непосредственным решением задачи smile

А вот , к прмеру, касперский или outpost firewall, они работают даже, когда компьютер ен залогинен. Или бэкапер cobian backup, тот же, там в нем прописываешь под авторизироватся и все, он сам шурует, даже если не залогинишься в windows...
Мне как раз как у них надо... smile

Цитата(drkot @ 10.8.2014,  15:33)

ZBugz, лучшее решение то, которое самое простое...

Согласен, поэтому и хочу сам написать, я считаю это самым простым smile 

Это сообщение отредактировал(а) ZBugz - 10.8.2014, 19:15
PM MAIL   Вверх
kami
Дата 11.8.2014, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(ZBugz @  10.8.2014,  19:13 Найти цитируемый пост)
А вот , к прмеру, касперский или outpost firewall, они работают даже, когда компьютер ен залогинен. Или бэкапер cobian backup, тот же, там в нем прописываешь под авторизироватся и все, он сам шурует, даже если не залогинишься в windows...

Ага. Пока не залогинен - "шурует" сервис.
Когда залогинен - сервис запускает GUI процесс под "залогиненным" пользователем, но "шуровать" продолжает все равно сервис. А гуй - всего-навсего представляет собой прослойку между пользователем и сервисом. Эта прослойка показывает информацию от сервиса - пользователю и отправляет в сервис команды, отданные пользователем.

Вы уверены, что теперь надо именно это?
PM MAIL WWW   Вверх
ZBugz
Дата 11.8.2014, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Цитата

Ага. Пока не залогинен - "шурует" сервис.
Когда залогинен - сервис запускает GUI процесс под "залогиненным" пользователем, но "шуровать" продолжает все равно сервис. А гуй - всего-навсего представляет собой прослойку между пользователем и сервисом. Эта прослойка показывает информацию от сервиса - пользователю и отправляет в сервис команды, отданные пользователем.

Вы уверены, что теперь надо именно это?

Неверно smile 
Хочу как у других...
Пока не залогиен, запускается сервис, который стартует мою программу. 
Как юзер залогинился, программа уже и так запущена, тогда два варианта (не знаю что лучше и как реализовать хотя бы один):

1. Так что ее не трогаем... Но все равно каждые 5 секунд проверяет ее запущенность, елси не запущенная, то запускает ее.
Если я закрываю комманду, то посылаю комманду сервису, который выключает таймер проверки запуска программы...
2. Выгружаем программу и срабатывает обычный автозапуск, который уже написан.
PM MAIL   Вверх
Delvish
Дата 12.8.2014, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


oO
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 13.12.2006

Репутация: 1
Всего: 4



Раз уж так хочется именно через сервис, то у Rouse_ есть хороший пример взаимодействия сервиса с рабочим столом пользователя

PM MAIL   Вверх
kami
Дата 12.8.2014, 11:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(ZBugz @  11.8.2014,  18:36 Найти цитируемый пост)
Хочу как у других...

Вы мне напоминаете 90+% заказчиков - они все хотят "чтобы было красиво", но вот что означает это "красиво" - никто объяснить не может. И когда пытаешься отдать им решение, начинается "ну, да, это конечно классно, но совсем не то что мне надо" (да, еще достаточно много народа признает только waterfall).

Давайте полностью проговорим алгоритм работы. 
"После загрузки компьютера запускается наша служба, которая..."
А дальше всё зависит от первой части. Но я не понимаю, чем плох авто-логон юзера, пусть даже сделанный из своего сервиса.

PM MAIL WWW   Вверх
kami
Дата 12.8.2014, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Update:

Цитата(ZBugz @  11.8.2014,  18:36 Найти цитируемый пост)
Пока не залогиен, запускается сервис, который стартует мою программу. 

Ок, программа стартанула. Но если ручками не залогинить пользователя до запуска приложения - вы не увидите его GUI. Хотя... у меня не было необходимости в использовании CreateProcessWithLogonW, посему - может и "прокатит".

Цитата(ZBugz @  11.8.2014,  18:36 Найти цитируемый пост)
каждые 5 секунд проверяет ее запущенность, елси не запущенная, то запускает ее.

Это - 2 под-задачи - а)получение списка процессов б)запуск своего от имени пользователя. Первая более чем широко описана, решение по второй предлагалось здесь во многих постах, включая пример Rouse, упомянутый drkot и Delvish.

Цитата(ZBugz @  11.8.2014,  18:36 Найти цитируемый пост)
Выгружаем программу и срабатывает обычный автозапуск, который уже написан.

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

Так чего же вам не хватает, чтобы начать решать эту задачу?

Это сообщение отредактировал(а) kami - 12.8.2014, 13:28
PM MAIL WWW   Вверх
Delvish
Дата 12.8.2014, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


oO
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 13.12.2006

Репутация: 1
Всего: 4



Оу, что-то я проглядел что drkot уже давал ссылку на Багеля. Зато я припомнил старую очень похожую тему, которую некогда встречал... kami, ваш же пост smile
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1036 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.