Я хочу получить имя службы внутри службы. Основная идея - получить идентификатор процесса и сравнить идентификатор процесса с сервисами, перечисленными API WMI, ServiceCotroller или EnumServicesStatusEx().Получить имя службы внутри службы
Проблема в том, что служба работает под учетной записью домена (это не локальный администратор). Когда я хочу перечислить службы внутри запущенной службы, запущенная служба сама отсутствует в перечислении!
Если я переведу учетную запись службы локальному администратору, найденная работа будет найдена. Так что это не проблема с кодом. (Если проблема с кодом, поведение должно быть одинаковым: служба не найдена.)
Если я извлечу логику в консольное приложение (или с помощью powershell) и запустим приложение или powershell в учетной записи службы, служба также будет найдена. Так что это не проблема разрешения. (Если проблема с разрешением, поведение должно быть одинаковым: служба не найдена.)
Служба НЕ МОЖЕТ быть перечислина, если учетная запись службы НЕ является администратором и службой INSIDE. Это очень проволочная проблема.
Я проверяю документацию для EnumServicesStatusEx из MSDN и обнаруживает, что локальный администратор имеет дополнительный SC_MANAGER_LOCK, чем локальный аутентифицированный пользователь. Это причина? Но я НЕ МОЖЕТ связывать блокировку с перечислением сервиса.
Или кто-нибудь, пожалуйста, укажите способ запроса имени службы внутри службы.
Спасибо.
BTW, Это на Windows 2008 R2.
У меня проблема: How to get name of windows service from inside the service itself. 1st answer не подходит для меня. Я хочу предоставить общую библиотеку и не иметь никакого контроля для установщика. 2nd answer та же идея со мной. Думаю, он должен быть таким же с моим результатом.
Спасибо за ваш ответ. Я получаю PID службы и пытаюсь запустить список задач, например: tasklist/FI "PID eq {PID}"/SVC/NH. Он возвращает имя службы * N/A *. BTW, если я запустил список задач в powershell с учетной записью службы, он может вернуть правильное имя службы. Таким образом, ваше решение не удалось. слишком. – DeepNight
Вы не забудете назвать это правильно? Можете ли вы дать точный синтаксис, который вы используете? – JPBlanc
'tasklist/FI" PID eq 2524 "/ SVC' return" sqlservr.exe 2524 MSSQLSERVER "в консоли возвращает« sqlservr.exe 2524 N/A »в служебном отладочном выходе. Так подключен. – DeepNight