Конференция "WinAPI" » Запуск приложения из-под сервиса [D7, WinXP]
 
  • MikeZ (28.02.08 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);


    не запускает ничего. Возможно, тоже по причине отсутствия пароля в уч. записи.
  • Игорь Шевченко © (28.02.08 10:05) [1]

    > Надо реализовать простую систему "неубиения" моего приложения


    Нафига ?
  • slow!alfamoon!com (28.02.08 11:11) [2]
    Присоединюсь в вопросу Игоря Шевченко

    >
    > Нафига ?


    А так то, понятно, что ничего не запустится таким образом. Надобно шаманить с CreateProcess. Например, помедитировать над STARTUPINFO.lpDesktop
  • Reindeer Moss Eater © (28.02.08 11:11) [3]
    перенести код приложения в сервис и решить проблему его неубивания средствами системы
  • MikeZ (28.02.08 13:03) [4]
    2 slow!alfamoon!com:
    Шаманил с CreateProcessAsUser. про косяк с паролем уже писал.

    2 Игорь Шевченко & Reindeer Moss Eater:
    Нуна :)
    Приложение для работы с внешним устройством не должно быть закрыто (надолго) и инфу получать должно более-менее надежно (по крайней мере, защиту "от дурака" надо предусмотреть). Перенести код в сервис - игра не стоит свеч. Если не выйдет с сервисом - тогда обычное приложение, с ним не будет такой мороки.
  • Сергей М. © (28.02.08 13:12) [5]

    > Перенести код в сервис - игра не стоит свеч


    Как раз таки стОит.
    На то они, сервисы, и рождены, чтобы тихо и надежно, без пыли и шума выполнять свою работу вне зависимости от сиюминутных прихотей пользователя.
  • MikeZ (28.02.08 14:58) [6]
    Поверь, это таки не тот случай :)
  • Reindeer Moss Eater © (28.02.08 15:07) [7]
    Ну допустим реализуешь ты логон из под юзера.
    Ситуация: моргнул свет и вот уже нет ни юзера ни десктопа.
    А сервис жив.
    Что ему делать с твоей приладой?
  • Сергей М. © (28.02.08 15:10) [8]

    > MikeZ   (28.02.08 14:58) [6]


    Подозреваю, что ты просто не знаешь как это сделать)
  • MikeZ (28.02.08 15:23) [9]
    2 Reindeer Moss Eater:
    ну, от накладок никто не застрахован. (проверку на наличие залогиненого юзера тоже можно встроить, хотя, конечно, ну его).

    2 Сергей М.:
    мне просто лень переделывать готовое и 100% рабочее, чтобы вдруг какие-то неизвестные мне косяки полезли и я угробил бы кучу времени с негарантированным результатом.

    "скажите, что вам нужно, и мы расскажем, как вам без этого обойтись" :)))

    Ну, нет, так нет. Значит придумаю что-нибудь попроще :)
  • slow!alfamoon!com (28.02.08 15:28) [10]
    Вы читать-то умеете? Я ни слова не говорил про CreateProcessAsUser! В месседже моем речь шла от CreateProcess!

    Если же Вы сподобитесь вписать в поле lpDesktop соответствующей структуры магическое заклинание 'winsta0\default', то будете (приятно) удивлены

    Описываемый Вами "протектор", только с несколько измененным функционалом, был написан давно и успешно  работает уже несколько лет.
  • Anatoly Podgoretsky © (28.02.08 15:31) [11]
    > MikeZ  (28.02.2008 15:23:09)  [9]

    Не юзера (не в подворотне), а пользователя и не пользователя, а пользователей, виндоус многопользовательская ОС
  • MikeZ (28.02.08 15:37) [12]
    2 Anatoly Podgoretsky:
    Да, большое спасибо. Всё заработало.

    2 slow!alfamoon!com.
    Просто не так прочитал. Посмотрю в эту сторону.
  • Сергей М. © (28.02.08 15:45) [13]

    > MikeZ   (28.02.08 15:23) [9]


    Все это чудесно, но непонятно, почему проблема "защиты от дурака" всплыла только сейчас, т.е. уже после написания защищаемой программы, а не на момент принятия решения о реализации критичной к "дурацким выходкам" логики в обычном приложении, а не приложении-сервисе)
  • MikeZ (28.02.08 15:48) [14]
    2 Сергей М.
    ТЗ, составляемое на ходу :(((((
    И, увы, на процес его составления у меня нет ни малейших рычагов влияния. Что будет завтра тоже не знаю. Вот и пытаюсь малой кровью...

    2 slow!alfamoon!com:
    Да, всё чудесно заработало. Именно то, что нужно. Большое спасибо.
  • slow!alfamoon!com (28.02.08 15:57) [15]
    2 MikeZ прошу извинить некоторую резкость формы ответа
  • Eraser © (28.02.08 18:32) [16]

    > MikeZ   (28.02.08 02:56) 


    > Как мне реализовать запуск приложения в сервисе, чтобы оно
    > (приложение) было запущено под текущей учетной записью?

    именно через CreateProcessAsUser.

    > Что за запись, её пароль (а его может и не быть, что, как
    > я понял, есть большими граблями для CreateProcessAsUser)
    > в общем случае - неизвестны

    а их и не надо знать, см. WTSQueryUserToken.
 
Конференция "WinAPI" » Запуск приложения из-под сервиса [D7, WinXP]
Есть новые Нет новых   [134431   +15][b:0][p:0.001]