Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.01.11;
Скачать: CL | DM;

Вниз

Запуск приложения из-под сервиса   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2009.01.11;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
2-1227780469
NS1989
2008-11-27 13:07
2009.01.11
TFileStream


8-1185733912
Ivolg
2007-07-29 22:31
2009.01.11
Сравнение изображений


2-1227599161
Valerik
2008-11-25 10:46
2009.01.11
SQL запрос


15-1226186059
Petr V. Abramov
2008-11-09 02:14
2009.01.11
ну теперь продажи пойдут


1-1205742601
Thrasher
2008-03-17 11:30
2009.01.11
Word и Delphi