|
Не дать NT Service запуститься из-под него самого
|
|||
---|---|---|---|
#18+
Порассуждать хочу. Перед тем как делать. Есть NT служба. .Net прибамбасами исторически для этого не пользуюсь. Устроен нехитро: NSSM - the Non-Sucking Service Manager запускает мой exe. При каких-то условиях (например отсутствие лицензии) хотелось бы чтоб он не запускался вообще. Хотелось бы: чтоб при попытке запуска он сам себя не дал запустить. Т.е. грубо, сервис начал запускаться, exe-шник понял что условие не выполнено и дал команду системе (из под себя), ну к примеру: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
(здесь главное чтобы команда "не ждала остановки", т.е. Net stop MyServiceName думаю не есть гуд) Насколько это реально и хорошо, такая конструкция? В принципе, как у меня сейчас, при "невыполнении условия", сервис (exe) запускается но ничего не делает (висит просто "форма" под System), но при этом индикатор в проге показывает что "типа работает". Но красивше чтоб он вообще не запускался. Я могу конечно реализовать это по другому, т.е. делать проверку извне, в коде, который этот сервис запускает. Но во-первых таких мест в программе несколько, могу если не сейчас то "через полгода" какое-то из них упустить. Плюс запуск "кривыми ручками из панели служб", автозапуск при старте системы и т.п. Ну, как бы не оч. красиво, хотелось бы чтоб он сам не давал себя запускать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2017, 09:14 |
|
Не дать NT Service запуститься из-под него самого
|
|||
---|---|---|---|
#18+
Дмитрий77, exe-шник может использовать dll, которая даст отлуп в dllmain о том что exe не запустился, сервис узнает немедленно при попытке сделать CreateProcess ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2017, 09:34 |
|
Не дать NT Service запуститься из-под него самого
|
|||
---|---|---|---|
#18+
ИзопропилДмитрий77, exe-шник может использовать dll, которая даст отлуп в dllmain о том что exe не запустился, сервис узнает немедленно при попытке сделать CreateProcess Exe-шник Net-овский. 2 C-шных dll он действительно использует: 1) opal 2) та что вычисляет "лицензию" (<здесь вычисляются условия запуска незапуска>). Но че-то то что ты предлагаешь как-то сложно для меня и наворочено. В существующих 2-х dll менять уже ничего не хочу, 3-ю делать ради этого тоже не хочу, тем более тупо не врубаюсь о чем речь. Попробовал сделать так как сам предложил: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
В принципе результат достигается, то чего и хотелось (верхняя картинка). Но с малой вероятностью могу нарваться на "Ошибка 1061: Служба в наст. момент не может принимать запросы..." (нижняя картинка). Т.е. остановка почему-то не сработала, а остановить штатно тоже уже не могу. И полечить это можно только убив exe-шник Non-Sucking Service Manager через Alt+Ctrl+Del (ну либо комп наверно перегрузить). Для юзера такой ситуации явно не хочу. М.б. после StopNTService("ServiceName") добавить сразу End Sub но блин ролики за шарики не уедут? Они и так уезжают, потому что StopNTService("ServiceName") -системная команда, и пока она соображает, сервис продолжает грузиться, в частности делать Application.Run(Form1) и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2017, 10:22 |
|
Не дать NT Service запуститься из-под него самого
|
|||
---|---|---|---|
#18+
Дмитрий77М.б. после StopNTService("ServiceName") добавить сразу End Sub но блин ролики за шарики не уедут? Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
"End Sub" вставил, и вроде все нормально стало, на "Ошибка 1061" больше не нарываюсь, стабильно первое сообщение. (мультизапусков службы тоже не происходит, когда она пытается себя непрерывно перезапускать, даже если в свойствах службы поставить автоперезапуск) Лучше конечно этот код местами подстраховывать проверкой из кода проги, когда она хочет запустить службу. С другой стороны, сильно стараться тоже смысла нет, режим нештатный, нафига юзеру запускать то, на что у него нет лицензии. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2017, 10:42 |
|
Не дать NT Service запуститься из-под него самого
|
|||
---|---|---|---|
#18+
Дмитрий77Есть NT служба. .Net прибамбасами исторически для этого не пользуюсь. Лучше бы Вы ими пользовались ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2017, 10:57 |
|
Не дать NT Service запуститься из-под него самого
|
|||
---|---|---|---|
#18+
Cat2Дмитрий77Есть NT служба. .Net прибамбасами исторически для этого не пользуюсь. Лучше бы Вы ими пользовались Возможно Вы правы. В данном конкретном случае EXE-шник как раз .Net-овский. Просто первая "служба", перенесенная мной из VB6 в .Net была "C++exe", и .Net-овская кухня там была неприменима, я тогда почитал про "кухню" и забил. А сейчас сделал по инерции опять через NSSM. Ну не переделывать же уже, работает ведь нормально. P.S. Привыкаешь к чему-то просто. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2017, 11:14 |
|
|
start [/forum/topic.php?fid=20&fpage=46&tid=1399992]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 161ms |
0 / 0 |