Сейчас на форуме: jinoweb (+4 невидимых)

 eXeL@B —› Программирование —› Службы Windows
Посл.ответ Сообщение


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 11 февраля 2016 19:12
· Личное сообщение · #1

Когда устанавливаем службу задаётся произвольное имя под которым она будет известна в системе и по которому можно ей управлять.
Как программно из самой службы получить имя под которым она была установлена?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 3.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 11 февраля 2016 19:33
· Личное сообщение · #2

Что за служба?




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 11 февраля 2016 19:51 · Поправил: -=AkaBOSS=-
· Личное сообщение · #3

в ServiceMain имя службы передаётся в качестве первого аргумента:

SvcMain has access to the command-line arguments for the service in the way that the main function of a console application does. The first parameter contains the number of arguments being passed to the service in the second parameter. There will always be at least one argument. The second parameter is a pointer to an array of string pointers. The first item in the array is always the service name.

MSDN - Writing a ServiceMain Function

| Сообщение посчитали полезным: Rainbow, Isaev


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 12 февраля 2016 13:09 · Поправил: Isaev
· Личное сообщение · #4

-=AkaBOSS=- пишет:
в ServiceMain имя службы передаётся в качестве первого аргумента


Это ServiceName... У службы есть ServiceName и DisplayName.

Например:
ServiceName = MySrv_Service (оно отображается в списке служб, оно же передаётся в ServiceMain)
DisplayName = My_Service

При установке службы через /INSTALL запрашиваются оба параметра, а управление происходит через DisplayName
Если нам нужно остановить службу например, нам нужно DisplayName, как это не странно... В данном случае:
Code:
  1. NET STOP My_Service

о котором служба не знает? или я просто его не могу найти

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 12 февраля 2016 13:18
· Личное сообщение · #5

Isaev пишет:
Если нам нужно остановить службу например, нам нужно DisplayName

неа. Display Name это опциональное название, которое отображается в списке служб. По нему нельзя обратиться к службе, совсем.

разберём на примере:
служба установлена в раздел HKLM\SYSTEM\CurrentControlSet\Services\Spooler
DisplayName = Диспетчер очереди печати
ServiceName = Spooler

Угадай, какое имя используется для управления?




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 12 февраля 2016 15:08 · Поправил: Isaev
· Личное сообщение · #6

-=AkaBOSS=- пишет:
Угадай, какое имя используется для управления?

похоже любое но это уже решает проблему... Я всегда пользовался первым, потому и затупил





PS: а для общего развития, DisplayName можно таки получить из самой службы?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 12 февраля 2016 15:54 · Поправил: -=AkaBOSS=-
· Личное сообщение · #7

Isaev пишет:
DisplayName можно таки получить из самой службы?

GetServiceDisplayName?

| Сообщение посчитали полезным: Isaev


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 12 февраля 2016 17:05
· Личное сообщение · #8

похоже... после выходных попробую

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh



 eXeL@B —› Программирование —› Службы Windows
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати