![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь Подтвердите свой е-майл
Регистрация: 04.07.2007
Сообщений: 75
|
![]()
Здравствуйте. У меня вопрос все по тойже функции CreateProcessWithLogonW. С помощью нее прога запускается от имени другого пользователя как надо. Но есть проблема. В системе должен работать сервис и прога.Если прога вырублена то сервис это отслеживает и запускает ее под именем того пользователя под каким она работала, если конечно пользователь не закрыл свою сессию. Имя пользователя известно , но как узнать необходимый пароль для подстановки его в CreateProcessWithLogonW?
|
![]() |
![]() |
![]() |
#2 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
Имя пользователья известно, пароль неизвестен. Что пишем? троян?
|
![]() |
![]() |
![]() |
#3 |
Пользователь Подтвердите свой е-майл
Регистрация: 04.07.2007
Сообщений: 75
|
![]()
Да нет не троян. Прогу для ограничения деток по времени пользования за компом. Вобщем прога уже готова. Два процесса запускаются одновременно и следят друг за другом, вобщем не дают себя закрыть даже если закрывать дерево процессов.. Все работает, но столкнулся с небольшой проблемкой. Если пользователь нажмет выключение компа или завершение сессии , а в системе работает какая-либо прога с несохраненными данными, то мои 2 процесса где-то в 50% случаев вырубаются быстрее чем та с несохраненными данными. В результатае пользователь вырубил мои процессы и может спокойно продолжать свою работу. Пробывал ловить сообщения о окончании сессии и невозвращать его винде ,чтобы не были закрыты мои процессы, но в этом случае выскакивает окно что винда ждет ответа от моих процессов. Вобщем в результате решил прикрутит еще сервис,который бы дополнительно следил бы за моими процессами. Теперь у меня 2 варианта, или сервис с CreateProcessWithLogonW или наити способ чтобы в случае вырубания винды мои процессы выключались бы самими последними из всех запущенных процессов ,исключая конечно системные. Может поскажите что дельное?
|
![]() |
![]() |
![]() |
#4 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
в этих двух процессах при получени сообщения о закрытии смотри, есть ли какие любо другие процессы от этого пользователя, если таких нет и остались только основыные системные процессы работающие от SYSTEM, NETWORK SERVICE и LOCAL SERVIСE то закрывайся, если ещё есть процессы запущенные от этого пользователя, то жди когда они закроются (через WaitForSingleObject) и только потом завершайся.
|
![]() |
![]() |
![]() |
#5 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
![]()
Можно попробовать с помощью SetProcessShutdownParameters установить приоритет при выключении для своей проги.
Каким образом проги следят друг за другом? Просто часто такую комбинацию можно завершить, если сначала остановить один процесс, потом завершить второй, а потом завершить первый. |
![]() |
![]() |
![]() |
#6 |
Пользователь Подтвердите свой е-майл
Регистрация: 04.07.2007
Сообщений: 75
|
![]()
Somebody огромное спасибо! Прописал при создании формы SetProcessShutdownParameters(1,SHUT DOWN_NORETRY); и весь вопрос решен. Провел небольшой опыт. Открыл 5 разных текстовых документов и внес в них изменения, а также переводчик сократ персональный 4, он почти все время закрывался последним. Сделал выключение компа.Система сразу давай спрашивать хотите ли вы сохранить и тп. Мои процессы закрылись самыми последним. Ксатати в этой функции есть еще другие флаги кроме SHUTDOWN_NORETRY, но что-то в инете за них нигде не слова. Не вкурсе для чего другие флаги?
Да, мои процессы можно закрыть таким способом как ты описал. Но чтобы так их закрыть, надо знать ,что такое поток и для чего он нужен и как его можно закрыть и с помощью чего. Как минимум нужен другой диспетчер задач . а не виндовый. К тому же для пользователей которые только и знают как нажимать кнопки в игре, я думаю пойдет. Хотя можно подумать чтобы в разных потоках одного процесса постоянно шла проверка , не остановлен ли второй поток, если остановлен, то перезагрузить сам себя. Вобшем следует порыться в информации о потоках. Одно время искал информацию как заблокировать процесс от закрытия, чтобы выскакивало сообщение доступ запрешен. Перечитал много информации, кстати помню rpy3uH писал за ноль кольцо и тп., но понял что это не для меня , опыт не позволяет делать такие вещи и поэтому решил завязаться с двумя процессами. |
![]() |
![]() |
![]() |
#7 | |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#8 | |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
![]() Цитата:
P.S. Эксперимент показал, что если 2 потока выполняют в бесконечном цикле ResumeThread - 1-й для 2-го, 2-й для 1-го, то этого всё равно недостаточно, чтобы защитить потоки от остановки с помощью ArtMoney. Последний раз редактировалось Somebody; 22.01.2009 в 13:52. |
|
![]() |
![]() |
![]() |
#9 | ||
Пользователь Подтвердите свой е-майл
Регистрация: 04.07.2007
Сообщений: 75
|
![]() Цитата:
Цитата:
Последний раз редактировалось rpy3uH; 23.01.2009 в 09:37. |
||
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как зарегистрировать сервис | Terran | Общие вопросы Delphi | 7 | 19.03.2009 13:10 |
Регистрация сервиса | Terran | Общие вопросы Delphi | 5 | 01.11.2008 18:15 |
Создание защищенного сервиса | miae | Общие вопросы Delphi | 5 | 21.01.2008 18:54 |
Как запустить программу из сервиса | Маркъ | Общие вопросы Delphi | 5 | 13.02.2007 00:29 |
как узнать путь запущенного сервиса | Alar | Общие вопросы Delphi | 0 | 30.10.2006 11:18 |