RegisterServiceProcess() CreateService()

Тема в разделе "WASM.WIN32", создана пользователем Tellur, 9 сен 2004.

  1. Tellur

    Tellur New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2004
    Сообщения:
    21
    Адрес:
    Новокузнецк
    Вот тут встала такая задача: запустить процесс как системный (надо чтоб он оставался запущенным при LogOut-e). В win2000/xp функции RegisterServiceProcess() нет. Попытался решить эту проблему так:
    Код (Text):
    1.   sm:=OpenSCManager(NIL,NIL,SC_MANAGER_ALL_ACCESS);
    2.   h:=CreateService(sm,'zMy','zMy',STANDARD_RIGHTS_REQUIRED,SERVICE_WIN32 _OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS,
    3.     SERVICE_AUTO_START,SERVICE_ERROR_IGNORE,'c:\s.exe',NIL,NIL,NIL,NIL,NIL );
    4.   CloseServiceHandle(h);
    5.   CloseServiceHandle(sm);
    6.  


    но процесс выполняется где-то 15 секунд и сдыхает (причем никаких экспекшенов не вылазит). Помогите пожалуйста с этим разобраться.
     
  2. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Чтобы процесс выполнялся как служба NT, он должен быть

    написан особым образом. Иначе Service Manager прихлопнет его (по умолчанию - через 30 секунд).

    Читайте Рихтера (если найдете) и ищите по форуму.
     
  3. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    Особый образ заключается в том что надо SCменеджеру сказать что типа я инициализировался, и у меня все ок. Иначе он действительно прибивает процесс. Про это кстати в обычном мсдне написано вполне толково.
     
  4. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Tellur, цепляйся за статью в MSDN "Handle Logons in Windows NT and Windows 2000 with Your Own Logon Session Broker"
     
  5. Tellur

    Tellur New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2004
    Сообщения:
    21
    Адрес:
    Новокузнецк
    Это я знаю. Извиняюсь за некорректно постаненный вопрос. Но задача такая: запустить процесс как системный или еще как-нибудь, но так что бы он оставался запущенным при LogOut-e. Изменять исполняемый файл (и его модули) нельзя, исходников от него тоже естественно нет. Вопрос: можно ли этого как-нибудь достичь с учетом вышеперечисленных ограниченй.

    У меня, например, недавно появилась еще одна мысля: создать свой процесс, который будет запускаться как сервис, а из него создавать Thread указывая в качестве lpStartAddress EntryPoint этого экзешника. Вопрос2: имеет ли такое решение "право на жизнь"?
     
  6. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    в винде есть утилитка runasservice. можешь ее попробовать. А запуск проги из сервиса не даст результата. При logout прога все равно прибивается. Я выкрутился тем, что в сервисе периодически проверяю работает ли моя прога и если нет, то опять запускаю ее. При таком подходе прога стартует еще до входа в винду, при логуате закрывается но сервис ее опять перезапускает и она продолжает работать. Некрасиво но меня такой вариант устроил.
     
  7. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    [ Tellur: <font color="indigo]Это я знаю.</font><!--color--> ]



    Всё равно цепляйся за вышеуказанную статью :) На этом сайте лежит моя тулза WinObjEx. Если запустить с ключом -s, то она перезапускает себя как сервис, сервис ещё раз перезапускает её как обычный процесс, а так как сервис выполняется с правами LocalSystem, то и запускаемый им процесс тоже. После того, как третий процесс запустился два первых уходят. Всё это синхронизируется через события. При логауте этот процесс не прибивается и при следующем логоне даже окно остается на десктопе даже для ограниченного пользователя. Для того, чтобы прикрутить всё это мне потребовалось прочитать вышеозначенную статью и другие статьи того же автора, да сходить к нему на сайт и посмотреть сорсы его тулзы cmdasuser.
     
  8. Tellur

    Tellur New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2004
    Сообщения:
    21
    Адрес:
    Новокузнецк
    2 Four-F

    Спасибо, что указали нужное напраление. Будем изучать.
     
  9. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Tellur

    Попробуйте сначала утилиты InstSrv и SrvAny от MS.
     
  10. Tellur

    Tellur New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2004
    Сообщения:
    21
    Адрес:
    Новокузнецк
    Quantum

    Действительно эти утилиты работают, программа запускается как сервис, но по непонятным причинам при логауте и последующем логине она исчезает
     
  11. Tellur

    Tellur New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2004
    Сообщения:
    21
    Адрес:
    Новокузнецк
    Причину я выяснил. мое приложение GUI-вское. И при логауте система шлет ему какие-то мессаги (WM_ENDSESSION, WM_CLOSE). Вот оно и закрывается.

    А как это поправить я еще не придумал. SetWindowsHookEx

    (WH_CALLWNDPROC,...) не подходит т.к. не позволяет удалить мессагу из очереди сообщений.
     
  12. Tellur

    Tellur New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2004
    Сообщения:
    21
    Адрес:
    Новокузнецк
    Хотя можно попробовать SetWindowLongPtr(GWLP_WNDPROC,...)
     
  13. BORYAK

    BORYAK Боран

    Публикаций:
    0
    Регистрация:
    22 апр 2005
    Сообщения:
    33
    Адрес:
    Kazakhstan
    подскажите, где можно почитать данную статью.
    http://www.microsoft.com/msj/0200/logon/logon.aspx линк не существует
     
  14. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    на archive.org поищи, может сохранилась?
     
  15. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
  16. BORYAK

    BORYAK Боран

    Публикаций:
    0
    Регистрация:
    22 апр 2005
    Сообщения:
    33
    Адрес:
    Kazakhstan
    IceStudent
    будь ты здоров.
    many thanks