-
Здравствуйте! Вопрос: Надо реализовать простую систему "неубиения" моего приложения. Я делаю это через сервис, который проверяет, запущено ли приложение, если нет - запускает его. Как мне реализовать запуск приложения в сервисе, чтобы оно (приложение) было запущено под текущей учетной записью? Что за запись, её пароль (а его может и не быть, что, как я понял, есть большими граблями для 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); не запускает ничего. Возможно, тоже по причине отсутствия пароля в уч. записи.
-
> Надо реализовать простую систему "неубиения" моего приложения
Нафига ?
-
Присоединюсь в вопросу Игоря Шевченко
> > Нафига ?
А так то, понятно, что ничего не запустится таким образом. Надобно шаманить с CreateProcess. Например, помедитировать над STARTUPINFO.lpDesktop
-
перенести код приложения в сервис и решить проблему его неубивания средствами системы
-
2 slow!alfamoon!com: Шаманил с CreateProcessAsUser. про косяк с паролем уже писал.
2 Игорь Шевченко & Reindeer Moss Eater: Нуна :) Приложение для работы с внешним устройством не должно быть закрыто (надолго) и инфу получать должно более-менее надежно (по крайней мере, защиту "от дурака" надо предусмотреть). Перенести код в сервис - игра не стоит свеч. Если не выйдет с сервисом - тогда обычное приложение, с ним не будет такой мороки.
-
> Перенести код в сервис - игра не стоит свеч
Как раз таки стОит. На то они, сервисы, и рождены, чтобы тихо и надежно, без пыли и шума выполнять свою работу вне зависимости от сиюминутных прихотей пользователя.
-
Поверь, это таки не тот случай :)
-
Ну допустим реализуешь ты логон из под юзера. Ситуация: моргнул свет и вот уже нет ни юзера ни десктопа. А сервис жив. Что ему делать с твоей приладой?
-
> MikeZ (28.02.08 14:58) [6]
Подозреваю, что ты просто не знаешь как это сделать)
-
2 Reindeer Moss Eater: ну, от накладок никто не застрахован. (проверку на наличие залогиненого юзера тоже можно встроить, хотя, конечно, ну его).
2 Сергей М.: мне просто лень переделывать готовое и 100% рабочее, чтобы вдруг какие-то неизвестные мне косяки полезли и я угробил бы кучу времени с негарантированным результатом.
"скажите, что вам нужно, и мы расскажем, как вам без этого обойтись" :)))
Ну, нет, так нет. Значит придумаю что-нибудь попроще :)
-
Вы читать-то умеете? Я ни слова не говорил про CreateProcessAsUser! В месседже моем речь шла от CreateProcess!
Если же Вы сподобитесь вписать в поле lpDesktop соответствующей структуры магическое заклинание 'winsta0\default', то будете (приятно) удивлены
Описываемый Вами "протектор", только с несколько измененным функционалом, был написан давно и успешно работает уже несколько лет.
-
> MikeZ (28.02.2008 15:23:09) [9]
Не юзера (не в подворотне), а пользователя и не пользователя, а пользователей, виндоус многопользовательская ОС
-
2 Anatoly Podgoretsky: Да, большое спасибо. Всё заработало.
2 slow!alfamoon!com. Просто не так прочитал. Посмотрю в эту сторону.
-
> MikeZ (28.02.08 15:23) [9]
Все это чудесно, но непонятно, почему проблема "защиты от дурака" всплыла только сейчас, т.е. уже после написания защищаемой программы, а не на момент принятия решения о реализации критичной к "дурацким выходкам" логики в обычном приложении, а не приложении-сервисе)
-
2 Сергей М. ТЗ, составляемое на ходу :((((( И, увы, на процес его составления у меня нет ни малейших рычагов влияния. Что будет завтра тоже не знаю. Вот и пытаюсь малой кровью...
2 slow!alfamoon!com: Да, всё чудесно заработало. Именно то, что нужно. Большое спасибо.
-
2 MikeZ прошу извинить некоторую резкость формы ответа
-
> MikeZ (28.02.08 02:56)
> Как мне реализовать запуск приложения в сервисе, чтобы оно > (приложение) было запущено под текущей учетной записью?
именно через CreateProcessAsUser.
> Что за запись, её пароль (а его может и не быть, что, как > я понял, есть большими граблями для CreateProcessAsUser) > в общем случае - неизвестны
а их и не надо знать, см. WTSQueryUserToken.
|