Здравствуйте, Qrdl, Вы писали:
Q>Как определить запущена программа как сервис или как обычное приложение без анализа командной строки
Не самое красивое решение, но первое, что пришло в голову:
если процесс запущен не как сервис, StartServiceCtrlDispatcher завершится с ошибкой 0х0427. Создай еще один поток, который будет проверять, как работает StartServiceCtrlDispatcher или завершился с ошибкой.
Второе, что пришло в голову:
проверяй под какой учетной записью работает процесс, обычно сервисы создают для работы под LocalSystem.
Re[2]: Как определить запущена программа как сервис или как
D>Второе, что пришло в голову: D>проверяй под какой учетной записью работает процесс, обычно сервисы создают для работы под LocalSystem.
вот этим советом точно не надо пользоваться =)
Re: Как определить запущена программа как сервис или как обы
И если lpServiceStatus->dwCurrentState == SERVICE_STOPPED значит ты запустился как обычная программа.
Правда это не актуально если твой сервис после останова продолжает что-то делать(IMHO это не корректно).
Искусственный интеллект — ничто по сравнению с естественной глупостью http://www.bevip.ru
Re[3]: Как определить запущена программа как сервис или как
Здравствуйте, Denis, Вы писали:
D>>Второе, что пришло в голову: D>>проверяй под какой учетной записью работает процесс, обычно сервисы создают для работы под LocalSystem. D>вот этим советом точно не надо пользоваться =)
Почему?
Если я пишу сервис, который должен работать под LocalSystem, то проблемы, которые огребет пользователь, запуская его под другой учетной записью, — его проблемы.
Но в целом согласен, через ж...
Re[4]: Как определить запущена программа как сервис или как
D>Почему? D>Если я пишу сервис, который должен работать под LocalSystem, то проблемы, которые огребет пользователь, запуская его под другой учетной записью, — его проблемы.
хм, хороший подход к пользователю...
ладно оставим, вопрос отношения к пользователю в стороне, я и обычную прогу могу под ним(LS) запустить... как тогда отличать?
Re[2]: Как определить запущена программа как сервис или как
FT>И если lpServiceStatus->dwCurrentState == SERVICE_STOPPED значит ты запустился как обычная программа. FT>Правда это не актуально если твой сервис после останова продолжает что-то делать(IMHO это не корректно).
Не годится.
1. Вполне может быть, что сервис работает, и запускается еще приложение.
2. Проверять это можно только после того, как сделаем SetServiceStatus( SERVICE_RUNNING )
Re: Как определить запущена программа как сервис или как обы
Здравствуйте, Denis, Вы писали:
D>>Почему? D>>Если я пишу сервис, который должен работать под LocalSystem, то проблемы, которые огребет пользователь, запуская его под другой учетной записью, — его проблемы. D>хм, хороший подход к пользователю...
Давай тогда изголяться чтоб один и тот же бинарник могли и под виндой запускать и под соляркой.
D>ладно оставим, вопрос отношения к пользователю в стороне,
D>я и обычную прогу могу под ним (LS) запустить... как тогда отличать?
Вот против таких запусков я пожалуй не стану возражать. Но тогда действительно придется использовать что-то другое.
Re[2]: Как определить запущена программа как сервис или как
FT>И если lpServiceStatus->dwCurrentState == SERVICE_STOPPED значит ты запустился как обычная программа. FT>Правда это не актуально если твой сервис после останова продолжает что-то делать(IMHO это не корректно).
Проблема еще в том, что сервис может быть еще даже не установлен!
Re[2]: Как определить запущена программа как сервис или как
К сожалению ссылки не содержат подходящего ответа, всё заканчивается анализом командной строки или полумерами, которые подходят не ко всем вариантам запуска :
1. Запуск сервиса;
2. Запуск приложения при установленном сервисе (сервис запущен);
3. Запуск приложения при установленном сервисе (сервис остановлен);
4. Запуск приложения при неустановленном сервисе.
Придется, видно, сначала проверять установлен ли сервис
Re[4]: Как определить запущена программа как сервис или как
Q>К сожалению ссылки не содержат подходящего ответа, всё заканчивается анализом командной строки или полумерами, которые подходят не ко всем вариантам запуска :
Правда? Вы их хоть посмотрели? Если да, то где вы там увидели полумеры?