Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запуск приложения из-под сервиса [D7, WinXP]


MikeZ ©   (2008-02-28 02:56:00) 

Здравствуйте!

Вопрос:
Надо реализовать простую систему "неубиения" моего приложения. Я делаю это через сервис, который проверяет, запущено ли приложение, если нет - запускает его. Как мне реализовать запуск приложения в сервисе, чтобы оно (приложение) было запущено под текущей учетной записью?

Что за запись, её пароль (а его может и не быть, что, как я понял, есть большими граблями для CreateProcessAsUser) в общем случае - неизвестны. Известно лишь то, что приложение под ней было только что запущено, и logon этой записи уже был.

Вариант с CreateProcessWithLogonWтоже не подошел.
Si.CB := SizeOf(TStartupInfo);
           Si.dwFlags := STARTF_USESHOWWINDOW;
           Si.wShowWindow := SW_SHOWDEFAULT;
           Si.lpReserved := Nil;
           Si.lpDesktop := Nil;
           Si.lpTitle := Nil;

           CreateProcessWithLogonW('Test', Nil, Nil, 0,
             Nil, 'notepad', 0, Nil, Nil, Si, PIf);

не запускает ничего. Возможно, тоже по причине отсутствия пароля в уч. записи.


Eraser   (2008-02-28 18:32:00) [1]


> MikeZ   (28.02.08 02:56) 


> Как мне реализовать запуск приложения в сервисе, чтобы оно
> (приложение) было запущено под текущей учетной записью?

именно через CreateProcessAsUser.

> Что за запись, её пароль (а его может и не быть, что, как
> я понял, есть большими граблями для CreateProcessAsUser)
> в общем случае - неизвестны

а их и не надо знать, см. WTSQueryUserToken.


slow!alfamoon!com   (2008-02-28 15:57:00) [2]

2 MikeZ прошу извинить некоторую резкость формы ответа


MikeZ   (2008-02-28 15:48:00) [3]

2 Сергей М.
ТЗ, составляемое на ходу :(((((
И, увы, на процес его составления у меня нет ни малейших рычагов влияния. Что будет завтра тоже не знаю. Вот и пытаюсь малой кровью...

2 slow!alfamoon!com:
Да, всё чудесно заработало. Именно то, что нужно. Большое спасибо.


Сергей М.   (2008-02-28 15:45:00) [4]


> MikeZ   (28.02.08 15:23) [9]


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


MikeZ   (2008-02-28 15:37:00) [5]

2 Anatoly Podgoretsky:
Да, большое спасибо. Всё заработало.

2 slow!alfamoon!com.
Просто не так прочитал. Посмотрю в эту сторону.


Anatoly Podgoretsky   (2008-02-28 15:31:00) [6]

> MikeZ  (28.02.2008 15:23:09)  [9]

Не юзера (не в подворотне), а пользователя и не пользователя, а пользователей, виндоус многопользовательская ОС


slow!alfamoon!com   (2008-02-28 15:28:00) [7]

Вы читать-то умеете? Я ни слова не говорил про CreateProcessAsUser! В месседже моем речь шла от CreateProcess!

Если же Вы сподобитесь вписать в поле lpDesktop соответствующей структуры магическое заклинание 'winsta0\default', то будете (приятно) удивлены

Описываемый Вами "протектор", только с несколько измененным функционалом, был написан давно и успешно  работает уже несколько лет.


MikeZ   (2008-02-28 15:23:00) [8]

2 Reindeer Moss Eater:
ну, от накладок никто не застрахован. (проверку на наличие залогиненого юзера тоже можно встроить, хотя, конечно, ну его).

2 Сергей М.:
мне просто лень переделывать готовое и 100% рабочее, чтобы вдруг какие-то неизвестные мне косяки полезли и я угробил бы кучу времени с негарантированным результатом.

"скажите, что вам нужно, и мы расскажем, как вам без этого обойтись" :)))

Ну, нет, так нет. Значит придумаю что-нибудь попроще :)


Сергей М.   (2008-02-28 15:10:00) [9]


> MikeZ   (28.02.08 14:58) [6]


Подозреваю, что ты просто не знаешь как это сделать)


Reindeer Moss Eater   (2008-02-28 15:07:00) [10]

Ну допустим реализуешь ты логон из под юзера.
Ситуация: моргнул свет и вот уже нет ни юзера ни десктопа.
А сервис жив.
Что ему делать с твоей приладой?


MikeZ   (2008-02-28 14:58:00) [11]

Поверь, это таки не тот случай :)


Сергей М.   (2008-02-28 13:12:00) [12]


> Перенести код в сервис - игра не стоит свеч


Как раз таки стОит.
На то они, сервисы, и рождены, чтобы тихо и надежно, без пыли и шума выполнять свою работу внезависимости от сиюминутных прихотей пользователя.


MikeZ   (2008-02-28 13:03:00) [13]

2 slow!alfamoon!com:
Шаманил с CreateProcessAsUser. про косяк с паролем уже писал.

2 Игорь Шевченко & Reindeer Moss Eater:
Нуна :)
Приложение для работы с внешним устройством не должно быть закрыто (надолго) и инфу получать должно более-менее надежно (по крайней мере, защиту "от дурака" надо предусмотреть). Перенести код в сервис - игра не стоит свеч. Если не выйдет с сервисом - тогда обычное приложение, с ним не будет такой мороки.


slow!alfamoon!com   (2008-02-28 11:11:00) [14]

Присоединюсь в вопросу Игоря Шевченко

>
> Нафига ?


А так то, понятно, что ничего не запустится таким образом. Надобно шаманить с CreateProcess. Например, помедитировать над STARTUPINFO.lpDesktop


Reindeer Moss Eater   (2008-02-28 11:11:00) [15]

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


Игорь Шевченко   (2008-02-28 10:05:00) [16]


> Надо реализовать простую систему "неубиения" моего приложения


Нафига ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо