Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
15-1226462765
Slider007
2008-11-12 07:06
2009.01.11
С днем рождения ! 12 ноября 2008 среда


9-1176630446
Piroxyline
2007-04-15 13:47
2009.01.11
Пример из туториала по Direct3D


2-1228133080
TInfo
2008-12-01 15:04
2009.01.11
setuid() :)


10-1151505364
maxims
2006-06-28 18:36
2009.01.11
com & win2003server


3-1212508441
Flyman
2008-06-03 19:54
2009.01.11
Как сделать поиск в базе данных в Юникоде





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский