Вот тут встала такая задача: запустить процесс как системный (надо чтоб он оставался запущенным при LogOut-e). В win2000/xp функции RegisterServiceProcess() нет. Попытался решить эту проблему так: Код (Text): sm:=OpenSCManager(NIL,NIL,SC_MANAGER_ALL_ACCESS); h:=CreateService(sm,'zMy','zMy',STANDARD_RIGHTS_REQUIRED,SERVICE_WIN32 _OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS, SERVICE_AUTO_START,SERVICE_ERROR_IGNORE,'c:\s.exe',NIL,NIL,NIL,NIL,NIL ); CloseServiceHandle(h); CloseServiceHandle(sm); но процесс выполняется где-то 15 секунд и сдыхает (причем никаких экспекшенов не вылазит). Помогите пожалуйста с этим разобраться.
Чтобы процесс выполнялся как служба NT, он должен быть написан особым образом. Иначе Service Manager прихлопнет его (по умолчанию - через 30 секунд). Читайте Рихтера (если найдете) и ищите по форуму.
Особый образ заключается в том что надо SCменеджеру сказать что типа я инициализировался, и у меня все ок. Иначе он действительно прибивает процесс. Про это кстати в обычном мсдне написано вполне толково.
Tellur, цепляйся за статью в MSDN "Handle Logons in Windows NT and Windows 2000 with Your Own Logon Session Broker"
Это я знаю. Извиняюсь за некорректно постаненный вопрос. Но задача такая: запустить процесс как системный или еще как-нибудь, но так что бы он оставался запущенным при LogOut-e. Изменять исполняемый файл (и его модули) нельзя, исходников от него тоже естественно нет. Вопрос: можно ли этого как-нибудь достичь с учетом вышеперечисленных ограниченй. У меня, например, недавно появилась еще одна мысля: создать свой процесс, который будет запускаться как сервис, а из него создавать Thread указывая в качестве lpStartAddress EntryPoint этого экзешника. Вопрос2: имеет ли такое решение "право на жизнь"?
в винде есть утилитка runasservice. можешь ее попробовать. А запуск проги из сервиса не даст результата. При logout прога все равно прибивается. Я выкрутился тем, что в сервисе периодически проверяю работает ли моя прога и если нет, то опять запускаю ее. При таком подходе прога стартует еще до входа в винду, при логуате закрывается но сервис ее опять перезапускает и она продолжает работать. Некрасиво но меня такой вариант устроил.
[ Tellur: <font color="indigo]Это я знаю.</font><!--color--> ] Всё равно цепляйся за вышеуказанную статью На этом сайте лежит моя тулза WinObjEx. Если запустить с ключом -s, то она перезапускает себя как сервис, сервис ещё раз перезапускает её как обычный процесс, а так как сервис выполняется с правами LocalSystem, то и запускаемый им процесс тоже. После того, как третий процесс запустился два первых уходят. Всё это синхронизируется через события. При логауте этот процесс не прибивается и при следующем логоне даже окно остается на десктопе даже для ограниченного пользователя. Для того, чтобы прикрутить всё это мне потребовалось прочитать вышеозначенную статью и другие статьи того же автора, да сходить к нему на сайт и посмотреть сорсы его тулзы cmdasuser.
Quantum Действительно эти утилиты работают, программа запускается как сервис, но по непонятным причинам при логауте и последующем логине она исчезает
Причину я выяснил. мое приложение GUI-вское. И при логауте система шлет ему какие-то мессаги (WM_ENDSESSION, WM_CLOSE). Вот оно и закрывается. А как это поправить я еще не придумал. SetWindowsHookEx (WH_CALLWNDPROC,...) не подходит т.к. не позволяет удалить мессагу из очереди сообщений.
подскажите, где можно почитать данную статью. http://www.microsoft.com/msj/0200/logon/logon.aspx линк не существует