Форум: "WinAPI";
Текущий архив: 2009.01.11;
Скачать: [xml.tar.bz2];
ВнизЗапуск приложения из-под сервиса Найти похожие ветки
← →
MikeZ (2008-02-28 02:56) [0]Здравствуйте!
Вопрос:
Надо реализовать простую систему "неубиения" моего приложения. Я делаю это через сервис, который проверяет, запущено ли приложение, если нет - запускает его. Как мне реализовать запуск приложения в сервисе, чтобы оно (приложение) было запущено под текущей учетной записью?
Что за запись, её пароль (а его может и не быть, что, как я понял, есть большими граблями для 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);
не запускает ничего. Возможно, тоже по причине отсутствия пароля в уч. записи.
← →
Игорь Шевченко © (2008-02-28 10:05) [1]
> Надо реализовать простую систему "неубиения" моего приложения
Нафига ?
← →
slow!alfamoon!com (2008-02-28 11:11) [2]Присоединюсь в вопросу Игоря Шевченко
>
> Нафига ?
А так то, понятно, что ничего не запустится таким образом. Надобно шаманить с CreateProcess. Например, помедитировать над STARTUPINFO.lpDesktop
← →
Reindeer Moss Eater © (2008-02-28 11:11) [3]перенести код приложения в сервис и решить проблему его неубивания средствами системы
← →
MikeZ (2008-02-28 13:03) [4]2 slow!alfamoon!com:
Шаманил с CreateProcessAsUser. про косяк с паролем уже писал.
2 Игорь Шевченко & Reindeer Moss Eater:
Нуна :)
Приложение для работы с внешним устройством не должно быть закрыто (надолго) и инфу получать должно более-менее надежно (по крайней мере, защиту "от дурака" надо предусмотреть). Перенести код в сервис - игра не стоит свеч. Если не выйдет с сервисом - тогда обычное приложение, с ним не будет такой мороки.
← →
Сергей М. © (2008-02-28 13:12) [5]
> Перенести код в сервис - игра не стоит свеч
Как раз таки стОит.
На то они, сервисы, и рождены, чтобы тихо и надежно, без пыли и шума выполнять свою работу вне зависимости от сиюминутных прихотей пользователя.
← →
MikeZ (2008-02-28 14:58) [6]Поверь, это таки не тот случай :)
← →
Reindeer Moss Eater © (2008-02-28 15:07) [7]Ну допустим реализуешь ты логон из под юзера.
Ситуация: моргнул свет и вот уже нет ни юзера ни десктопа.
А сервис жив.
Что ему делать с твоей приладой?
← →
Сергей М. © (2008-02-28 15:10) [8]
> MikeZ (28.02.08 14:58) [6]
Подозреваю, что ты просто не знаешь как это сделать)
← →
MikeZ (2008-02-28 15:23) [9]2 Reindeer Moss Eater:
ну, от накладок никто не застрахован. (проверку на наличие залогиненого юзера тоже можно встроить, хотя, конечно, ну его).
2 Сергей М.:
мне просто лень переделывать готовое и 100% рабочее, чтобы вдруг какие-то неизвестные мне косяки полезли и я угробил бы кучу времени с негарантированным результатом.
"скажите, что вам нужно, и мы расскажем, как вам без этого обойтись" :)))
Ну, нет, так нет. Значит придумаю что-нибудь попроще :)
← →
slow!alfamoon!com (2008-02-28 15:28) [10]Вы читать-то умеете? Я ни слова не говорил про CreateProcessAsUser! В месседже моем речь шла от CreateProcess!
Если же Вы сподобитесь вписать в поле lpDesktop соответствующей структуры магическое заклинание "winsta0\default", то будете (приятно) удивлены
Описываемый Вами "протектор", только с несколько измененным функционалом, был написан давно и успешно работает уже несколько лет.
← →
Anatoly Podgoretsky © (2008-02-28 15:31) [11]> MikeZ (28.02.2008 15:23:09) [9]
Не юзера (не в подворотне), а пользователя и не пользователя, а пользователей, виндоус многопользовательская ОС
← →
MikeZ (2008-02-28 15:37) [12]2 Anatoly Podgoretsky:
Да, большое спасибо. Всё заработало.
2 slow!alfamoon!com.
Просто не так прочитал. Посмотрю в эту сторону.
← →
Сергей М. © (2008-02-28 15:45) [13]
> MikeZ (28.02.08 15:23) [9]
Все это чудесно, но непонятно, почему проблема "защиты от дурака" всплыла только сейчас, т.е. уже после написания защищаемой программы, а не на момент принятия решения о реализации критичной к "дурацким выходкам" логики в обычном приложении, а не приложении-сервисе)
← →
MikeZ (2008-02-28 15:48) [14]2 Сергей М.
ТЗ, составляемое на ходу :(((((
И, увы, на процес его составления у меня нет ни малейших рычагов влияния. Что будет завтра тоже не знаю. Вот и пытаюсь малой кровью...
2 slow!alfamoon!com:
Да, всё чудесно заработало. Именно то, что нужно. Большое спасибо.
← →
slow!alfamoon!com (2008-02-28 15:57) [15]2 MikeZ прошу извинить некоторую резкость формы ответа
← →
Eraser © (2008-02-28 18:32) [16]
> MikeZ (28.02.08 02:56)
> Как мне реализовать запуск приложения в сервисе, чтобы оно
> (приложение) было запущено под текущей учетной записью?
именно через CreateProcessAsUser.
> Что за запись, её пароль (а его может и не быть, что, как
> я понял, есть большими граблями для CreateProcessAsUser)
> в общем случае - неизвестны
а их и не надо знать, см. WTSQueryUserToken.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2009.01.11;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c