|
|
|
Узнать как кем был запущен процесс
|
|||
|---|---|---|---|
|
#18+
Пишу сервис (gmtsrv.exe) на базе TService который имеет 4 параметра: /INSTALL - установить службу /UNINSTALL - удалить службу /START - запустить службу /STOP - остановить службу Служба всего лишь при старте инициализирует форму которая в скрытом режиме выполняет нужную работу. Также предусмотрена возможность работы с моим gmtsrv.exe как с обычным приложением, это если он не устанавливался как служба. Возникает следующая проблема, если сделать так: 1) запускаем gmtsrv.exe /install - в результате зарегистрировалась служба (в случае ее запуска и с параметром /start она запустит мой gmtsrv.exe естественно под пользователем SYSTEM) 2) запускаем gmtsrv.exe - и здесь бы пользователю хотелось бы выдать сообщение что мол gmtsrv.exe уже был установлен как сервис (служба) и использовать как приложение можно только, если удалить службу через /UNINSTALL Для этого нужно узнать кем же был запущен процесс, службой или все пользователем как это сделать??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2010, 23:33 |
|
||
|
Узнать как кем был запущен процесс
|
|||
|---|---|---|---|
|
#18+
DelphiLexx Для этого нужно узнать кем же был запущен процесс, службой или все пользователем как это сделать??? Говорил же я тебе - используй WinAPI... Там всё просто: вернул StartServiceCtrlDispatcher() ERROR_FAILED_SERVICE_CONTROLLER_CONNECT - ты запущен как приложение. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2010, 23:52 |
|
||
|
Узнать как кем был запущен процесс
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Говорил же я тебе - используй WinAPI... Там всё просто: вернул StartServiceCtrlDispatcher() ERROR_FAILED_SERVICE_CONTROLLER_CONNECT - ты запущен как приложение. А есть ли возможность также через API узнать это, но не прибегая к ф-циям пытающие стартовать сервис, ведь на сколько я понимаю StartServiceCtrlDispatcher пытается стартовать процесс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2010, 00:17 |
|
||
|
Узнать как кем был запущен процесс
|
|||
|---|---|---|---|
|
#18+
DelphiLexx на сколько я понимаю StartServiceCtrlDispatcher пытается стартовать процесс. Ни на сколько ты не понимаешь. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2010, 00:21 |
|
||
|
Узнать как кем был запущен процесс
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Ни на сколько ты не понимаешь. как так??? Исходя из параметров StartServiceCtrlDispatcher ему передается имя сервиса и главная процедура, так вот StartServiceCtrlDispatcher передает имя управление ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2010, 00:34 |
|
||
|
Узнать как кем был запущен процесс
|
|||
|---|---|---|---|
|
#18+
DelphiLexxкак так??? Вот так. Отказался идти по пути познания, вот и тычешься теперь в параметры как слепое щеня. Ты не на параметры смотри, а на то когда и зачем эта функция обязана быть вызвана. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2010, 00:38 |
|
||
|
Узнать как кем был запущен процесс
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov DelphiLexxкак так??? Вот так. Отказался идти по пути познания, вот и тычешься теперь в параметры как слепое щеня. Ты не на параметры смотри, а на то когда и зачем эта функция обязана быть вызвана. Дмитрий, ты можешь сказать способ как через API узнать юзер меня (gmtsrv.exe) пытается запустить или все же сервис, путем нажатия на кнопку Запустить(Пуск) в апплете Службы (Панель управление->Ажминистрирование->Службы)? Доступ к Api сервису у меня есть - TService же не перекрывает доступ к API, а просто выполняет большую часть работы в том числе удобство использования OnStart, OnStop. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2010, 00:52 |
|
||
|
Узнать как кем был запущен процесс
|
|||
|---|---|---|---|
|
#18+
DelphiLexxюзер меня (gmtsrv.exe) пытается запустить или все же сервис, путем нажатия на кнопку Запустить(Пуск) в а если этот самый юзер в свойствах твоего сервиса поменяет умолчательный LocalSystem на себя или специально созданного юзера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2010, 01:36 |
|
||
|
Узнать как кем был запущен процесс
|
|||
|---|---|---|---|
|
#18+
... и поставит соотв. галочку. P.S. Про соотв. программы-"сервизаторы" напоминать не будем. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2010, 01:41 |
|
||
|
Узнать как кем был запущен процесс
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам... и поставит соотв. галочку. P.S. Про соотв. программы-"сервизаторы" напоминать не будем. Согласен способ с выяснением кем был запущен процесс не совсем удачен, но тогда как быть мне просто нужно различить запускался ли процесс нажатием кнопки Пуск(Запустить) в апплете службы или другим способом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2010, 07:58 |
|
||
|
Узнать как кем был запущен процесс
|
|||
|---|---|---|---|
|
#18+
Предлагаю простое решение. При запуске приложения создаем именованный мьютекс. Если создать не получилось по причине мьютекс уже создан - значит приложение уже запущено - выходим с ошибкой. В этом случае можно не беспокоится, что юзер запустит вначале приложение, а потом попытается запустить службу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2010, 08:15 |
|
||
|
Узнать как кем был запущен процесс
|
|||
|---|---|---|---|
|
#18+
Если я правильно понял, то проблема в том, что если программа запускается как обычное приложение и установлена соответствующая служба, то выдать пользователю предупреждение Определить, что запущено обычное приложение очень просто - в этом случае не вызывается событие TService.OnServiceStart Определить наличие зарегистрированной службы поможет OpenService() Все ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2010, 14:03 |
|
||
|
Узнать как кем был запущен процесс
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Если я правильно понял, то проблема в том, что если программа запускается как обычное приложение и установлена соответствующая служба, то выдать пользователю предупреждение Нет, проблема в отсутствии головного мозга у аффтара. Он и пытается вроде думать, ан нечем. И даже гугль (на счёт "два" выдающий статью из MSDN "Как определить запущено ли приложение как сервис или нет") не помогает. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2010, 14:08 |
|
||
|
Узнать как кем был запущен процесс
|
|||
|---|---|---|---|
|
#18+
Ну и че на парня наехали?, Тут и с мозгами не сразу поймешь что делать с этим TService :) Если прочитать его самый первый пост, то ему нужно либо сервис запускать либо приложение! Поэтому ему до вызова Application.Run , определиться какой собственно Application , из Forms или из SvcMgr использовать!!! Так что ждать вызова TService.OnServiceStart когда не понятно еще какой Application будет задействован как то не в кассу. з.ы. Можно конечно не отказаться от TService , и по методу Сибирякова(возможно как учебный вариант самый лучший способ). Но думаю можно покопаться и с TService заставить работать! Мне этот вариант интереснее кажется, но тока времени щас копать нету, если тока попозже:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2010, 17:11 |
|
||
|
Узнать как кем был запущен процесс
|
|||
|---|---|---|---|
|
#18+
Зарегить сервис с ключом командной строки. В коде if FindCmdLineSwitch('service') then сервис иначе обычный запуск ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2010, 18:12 |
|
||
|
Узнать как кем был запущен процесс
|
|||
|---|---|---|---|
|
#18+
wellwell, похоже на то что прокатит, ну акромя того случая когда этот экзешник запустят через cmd или в батнике с параметром service :), чисто случайно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2010, 18:23 |
|
||
|
Узнать как кем был запущен процесс
|
|||
|---|---|---|---|
|
#18+
wellwellЗарегить сервис с ключом командной строки. В коде if FindCmdLineSwitch('service') then сервис иначе обычный запуск Молодец wellwell ты в самую точку. Ребята отсюда ( http://forum.sources.ru/index.php?act=ST&f=12&t=311400&st=0 так и подсказали и это одно из самых простых и надежных решений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2010, 09:14 |
|
||
|
Узнать как кем был запущен процесс
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovDelphiLexxкак так??? Вот так. Отказался идти по пути познания, вот и тычешься теперь в параметры как слепое щеня. Ты не на параметры смотри, а на то когда и зачем эта функция обязана быть вызвана. Дмитрий! Можете немного по подробнее рассказать про StartServiceCtrlDispatcher. Судя по МСДН-у мы передает в параметрах название сервиса и адрес функции сервиса. Как это нам может помочь при проверке запуска приложения как службы или консольного приложения. Я увидел что если мы получаем ERROR_FAILED_SERVICE_CONTROLLER_CONNECT - то считаем что запускается консольное приложение, но что мы при этом должны передавать в параметрах? Я не нахожу правильным проверять от имени какого пользователя запускается приложение, или проверять параметры запуска. Я тоже пишу службу/приложение и для нормальной работы мне тоже необходимо понять на этапе инициализации кто запускает (менеджер служб или пользователь) службу/приложение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2015, 10:09 |
|
||
|
Узнать как кем был запущен процесс
|
|||
|---|---|---|---|
|
#18+
DelphiLexxwellwellЗарегить сервис с ключом командной строки. В коде if FindCmdLineSwitch('service') then сервис иначе обычный запуск Молодец wellwell ты в самую точку. Ребята отсюда ( http://forum.sources.ru/index.php?act=ST&f=12&t=311400&st=0 так и подсказали и это одно из самых простых и надежных решений. Это вариант не плох, но он всего лишь обходной маневр задачи. Как насчет выработки универсального решения??? А не частного? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2015, 10:12 |
|
||
|
Узнать как кем был запущен процесс
|
|||
|---|---|---|---|
|
#18+
StartServiceCtrlDispatcher() - работает криво. Если использовать для проверки - то приложение отрабатывает нормально, служба загибается. Как вариант - проверять каким процессом было запущено приложение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2015, 16:35 |
|
||
|
Узнать как кем был запущен процесс
|
|||
|---|---|---|---|
|
#18+
Мне недавно тоже надоело постоянно переключать параметр как запускать приложение : служба или GUI. Немного покопался ради интереса и нашел вот что: авторA window station contains a clipboard, an atom table, and one or more desktop objects. Each window station object is a securable object. When a window station is created, it is associated with the calling process and assigned to the current session. The interactive window station is the only window station that can display a user interface or receive user input. It is assigned to the logon session of the interactive user, and contains the keyboard, mouse, and display device. It is always named "WinSta0". All other window stations are noninteractive, which means they cannot display a user interface or receive user input. When a user logs on to a computer using Remote Desktop Services, a session is started for the user. Each session is associated with its own interactive window station named "WinSta0". For more information, see Remote Desktop Sessions. Также нашел вот это: https://support.microsoft.com/en-us/help/171890/info-services-desktops-and-window-stations Проверил имя для сервиса и для GUI... WinSta0 - для гуи и Service-0x0-3e7 для сервиса Поэтому по сути получилось вот так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. Учитывая что создавать интерактивные сервисы дурной тон (кстати у меня не проверка с галкой не сработала), можно забить на пункт авторthe service type includes the SERVICE_INTERACTIVE_PROCESS flag), the service will use the following Window station and Desktop: Winsta0\default Из плюшек, не надо парится как запускается приложение.. как служба или как просто exe или из под IDE.. без всяких параметров и директив ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2018, 13:22 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=112&tid=2041045]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 261ms |
| total: | 420ms |

| 0 / 0 |
