Таблица ServiceInstall

Таблица ServiceInstall используется для установки службы и содержит следующие столбцы.

Столбец Type Ключ Допускает значения NULL
ServiceInstall Идентификатор Да N
Имя Форматированные N N
DisplayName Форматированные N Да
ServiceType DoubleInteger Нет N
StartType DoubleInteger N N
ErrorControl DoubleInteger N N
LoadOrderGroup Форматированные N Да
Зависимости Форматированные N Да
StartName Форматированные N Да
Пароль Форматированные N Да
Аргументы Форматированные N Да
Компонент_ Идентификатор N N
Описание Форматированные N Да

 

Столбцы

ServiceInstall

Это первичный ключ для таблицы.

Имя

Этот столбец представляет собой строку, которая дает имя службы для установки. Максимальная длина строки — 256 символов. База данных диспетчера управления службами сохраняет регистр символов в имени службы, но при сравнении имен служб регистр не учитывается. Косая черта (/) и обратная косая черта (\) являются недопустимыми символами имени службы.

Displayname

Этот столбец представляет собой локализуемую строку, которую программы пользовательского интерфейса используют для идентификации службы. Максимальная длина строки — 256 символов. Диспетчер управления службами сохраняет регистр отображаемого имени, но при сравнении отображаемых имен регистр не учитывается.

ServiceType

Этот столбец представляет собой набор битовых флагов, определяющих тип службы. В этом столбце необходимо указать один из следующих типов служб.

Тип службы Значение Описание
SERVICE_WIN32_OWN_PROCESS 0x00000010 Служба Microsoft Win32, которая выполняет собственный процесс.
SERVICE_WIN32_SHARE_PROCESS 0x00000020 Служба Win32, которая совместно использует процесс.
SERVICE_INTERACTIVE_PROCESS 0x00000100 Служба Win32, взаимодействующая с рабочим столом. Это значение не может использоваться отдельно и должно быть добавлено к одному из двух предыдущих типов. Столбец StartName должен иметь значение LocalSystem или null при использовании этого флага.

 

Следующие типы служб не поддерживаются.

Тип службы Значение Описание
SERVICE_KERNEL_DRIVER 0x00000001 Служба драйверов.
SERVICE_FILE_SYSTEM_DRIVER 0x00000002 Служба драйверов файловой системы.

 

StartType

Этот столбец представляет собой набор битовых флагов, указывающих время запуска службы. В этом столбце необходимо указать один из следующих типов запуска службы.

Тип запуска службы Значение Описание
SERVICE_AUTO_START 0x00000002 Служба запускается во время запуска системы.
SERVICE_DEMAND_START 0x00000003 Служба запускается, когда диспетчер управления службами вызывает функцию StartService .
SERVICE_DISABLED 0x00000004 Указывает службу, которая больше не может быть запущена.

 

Установщик Windows не может использовать параметры SERVICE_BOOT_START и SERVICE_SYSTEM_START.

ErrorControl

В этом столбце указывается действие, выполняемое программой запуска, если служба не запускается во время запуска. Эти значения влияют на события ServiceControl StartService для установленных служб. В этом столбце должен быть указан один из следующих флагов управления ошибками.

Добавление константы msidbServiceInstallErrorControlVital (value = 0x08000) к флагам в следующей таблице указывает, что общая установка завершится ошибкой, если не удается установить службу в системе.

Флаг управления ошибками Значение Действие запуска программы
SERVICE_ERROR_IGNORE 0x00000000 Регистрирует ошибку и продолжает выполнение операции запуска.
SERVICE_ERROR_NORMAL 0x00000001 Регистрирует ошибку, отображает окно сообщения и продолжает операцию запуска.
SERVICE_ERROR_CRITICAL 0x00000003 Регистрирует ошибку, если это возможно, и система перезапускается с последней известной конфигурацией. Если запускается последняя известная конфигурация, операция запуска завершается ошибкой.

 

LoadOrderGroup

Этот столбец содержит строку с именем группы упорядочения нагрузки, членом которой является данная служба. Укажите значение NULL или пустую строку, если служба не принадлежит к группе.

Зависимости

Этот столбец представляет собой список имен служб или групп упорядочения загрузки, которые система должна запустить перед этой службой. Разделяйте имена в списке по значениям NULL. Если у службы нет зависимостей, укажите null или пустую строку. Используйте синтаксис [~], чтобы вставить значение NULL. Зависимость от группы означает, что эта служба может запускаться, если после попытки запуска всех участников группы выполняется по крайней мере один из участников группы.

Например, чтобы требовать от системы запуска service1 и service2, перед запуском службы, указанной в столбце ServiceInstall, введите service1[~]service2[~][~] в столбец Зависимости. Идентификаторы service1 и service2 должны находиться в первичном ключе таблицы или быть именем уже установленной службы.

Имена групп необходимо добавить в префикс +, чтобы их можно было отличить от имени службы. Чтобы система запускала service1 и хотя бы одного участника группы заказов MyGroup перед запуском службы, указанной в столбце ServiceInstall, введите service1[~]+MyGroup[~][~].

StartName

Служба входит в систему как имя, заданное строкой в этом столбце. Если тип службы — SERVICE_WIN32_OWN_PROCESS используйте имя учетной записи в формате DomainName\UserName. Если учетная запись принадлежит встроенному домену, можно указать .\UserName. Учетная запись LocalSystem должна использоваться, если служба является SERVICE_WIN32_SHARE_PROCESS или SERVICE_INTERACTIVE_PROCESS. Функция CreateService использует учетную запись LocalSystem, если StartName указано как null, и большинство служб оставляют этот столбец пустым.

Пароль

Эта строка является паролем для имени учетной записи, указанной в столбце StartName. Обратите внимание, что пользователь должен иметь разрешения на вход в качестве службы. Служба не имеет пароля, если startName имеет значение NULL или пустую строку. Startname localSystem имеет значение NULL, поэтому пароль в этом экземпляре имеет значение NULL, поэтому большинство служб оставляют этот столбец пустым.

Обратите внимание, что после удаления службы, которая была установлена с именем пользователя и паролем, установщик не может выполнить откат службы без предварительного использования пользовательского действия для получения пароля. Установщик может получить все необходимые сведения о службе, кроме пароля, который хранится в защищенной части системы. Настраиваемое действие получает пароль, запрашивая пользователя, считывая свойство из базы данных или считывая файл. Затем настраиваемое действие должно вызвать ChangeServiceConfig, чтобы указать пароль, прежде чем переустанавливать службу.

Установщик Windows не записывает значение, введенное в поле Пароль, в файл журнала.

Аргументы

Этот столбец содержит все аргументы или свойства командной строки, необходимые для запуска службы.

Компонент_

Внешний ключ к столбцу один из таблиц компонентов. Обратите внимание, что для установки этой службы с помощью таблицы InstallService keyPath для этого компонента должен быть исполняемым файлом службы.

Описание

Этот столбец содержит локализуемое описание настраиваемой службы. Если этот столбец оставить пустым, установщик использует существующее описание службы, если оно существует. Дополнительные сведения см. в разделе SERVICE_DESCRIPTION в пакете sdk для Microsoft Windows. Чтобы удалить существующее описание, введите "[~]" в этом столбце. Это приводит к пустому описанию новой или существующей службы.

Комментарии

Действие InstallServices в таблицах последовательностей обрабатывает сведения в этой таблице. Сведения об использовании таблиц последовательностей см. в разделе Использование таблицы последовательностей.

В этой таблице содержится большинство параметров функции Win32 CreateService .

Хотя можно использовать пользовательский интерфейс, чтобы указать, что служба должна быть установлена как запускаемая из источника, установщик фактически не поддерживает этот тип установки. Службы, которые выполняются с уровнем привилегий локальной системы, должны быть установлены для запуска с локального жесткого диска. Избегайте установки служб, которые олицетворяют привилегии определенного пользователя, так как это может привести к записи данных безопасности в журнал или системный реестр. Это может привести к проблеме безопасности, конфликту паролей или потере данных конфигурации при перезапуске системы.

Чтобы удалить службу во время удаления, в таблице ServiceControl должна быть соответствующая запись для службы, а в столбце Событие должен отображаться флаг msidbServiceControlEventUninstallDelete . Установщик не удаляет службу из таблицы ServiceInstall во время удаления без этой записи в таблице ServiceControl.

Сведения о том, как защитить службу, см. в таблице MsiLockPermissionsEx.

Проверка

ICE03
ICE06
ICE32
ICE45
ICE46
ICE66
ICE69