Как я могу получить тип запуска службы из InstallShield? - PullRequest
0 голосов
/ 21 марта 2011

У меня есть установщик InstallScript, который должен изменить тип запуска существующей службы (т. Е. Автоматический, ручной или отключенный) на основе его текущего значения.Например, если текущий тип запуска «Отключен», он может оставить его таким, а в противном случае он может установить его на «Автоматически».

К сожалению, я не могу найти способ получения типа запуска службы.Существуют функции, позволяющие определить, существует ли служба (ServiceExistsService) и получить ее текущее состояние запуска / остановки (ServiceGetServiceState), но ничего, что бы извлекало параметры службы.Я подумал, что, возможно, вызов одной из этих функций приведет к заполнению структуры SERVICE_IS_PARAMS как побочного эффекта, но, похоже, это не так.

Как я могу получить тип запуска службы?

Ответы [ 2 ]

1 голос
/ 22 марта 2011

Это не совсем рекомендуется, но на практике должно быть достаточно просто прочитать эту информацию из HKLM\System\CurrentControlSet\Services\TheServiceName;в частности DWORD Start содержит тип запуска.Обратите внимание, что прямое изменение этого параметра в реестре вряд ли повлияет на ситуацию, по крайней мере, до перезагрузки, поэтому по-прежнему полезно использовать API для применения каких-либо изменений.

В качестве альтернативы, если вы хотите сделать все правильноможет объявить структуры и функции, необходимые для доступа к Advapi32.QueryServiceConfig .Это поддержит любую версию Windows, которая изменила расположение реестра или базовое хранилище (что-то, чего я не ожидал, но это следует считать возможным).

0 голосов
/ 29 октября 2015

Другой вариант, который медленнее, но должен быть защищен от сбоев, - это запустить WMIC.exe с параметрами 'service MyServiceName get StartMode' и перенаправить вывод в файл.Затем прочитайте файл и 2-я строка должна содержать ответ (Авто / Вручную / Отключено)

...