![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запуск приложения из-под сервиса [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]
> Надо реализовать простую систему "неубиения" моего приложения
Нафига ?