ServiceInstall 테이블

ServiceInstall 테이블은 서비스를 설치하는 데 사용되며 다음과 같은 열이 있습니다.

Column 형식 Nullable
ServiceInstall 식별자 Y N
속성 Formatted N N
DisplayName 서식 있음 N Y
ServiceType DoubleInteger N N
StartType DoubleInteger N N
ErrorControl DoubleInteger N N
LoadOrderGroup 서식 있음 N Y
종속성 서식 있음 N Y
StartName 서식 있음 N Y
암호 서식 있음 N Y
인수 서식 있음 N Y
Component_ 식별자 N N
설명 Formatted N Y

 

ServiceInstall

테이블의 기본 키입니다.

Name

이 열은 설치할 서비스 이름을 제공하는 문자열입니다. 이 문자열의 최대 길이는 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 Installer는 SERVICE_BOOT_START 및 SERVICE_SYSTEM_START 옵션을 사용할 수 없습니다.

ErrorControl

이 열은 시작 중에 서비스 시작이 실패한 경우 시작 프로그램에서 수행하는 작업을 지정합니다. 이러한 값은 설치된 서비스에 대한 ServiceControl StartService 이벤트에 영향을 줍니다. 다음 오류 제어 플래그 중 하나를 이 열에 지정해야 합니다.

다음 표의 플래그에 msidbServiceInstallErrorControlVital(값 = 0x08000)을 추가하면 서비스를 시스템에 설치할 수 없는 경우 전체 설치가 실패하도록 지정합니다.

오류 제어 플래그 시작 프로그램의 작업
SERVICE_ERROR_IGNORE 0x00000000 오류를 기록하고 시작 작업을 계속합니다.
SERVICE_ERROR_NORMAL 0x00000001 오류를 기록하고 메시지 상자를 표시하며 시작 작업을 계속합니다.
SERVICE_ERROR_CRITICAL 0x00000003 가능한 경우 오류를 기록하고, 양호한 것으로 알려진 마지막 구성을 사용하여 시스템을 다시 시작합니다. 마지막으로 알려진 양호한 구성이 시작 중인 경우 시작 작업은 실패합니다.

 

LoadOrderGroup

이 열에는 이 서비스가 멤버인 부하 순서 그룹 이름을 지정하는 문자열이 포함되어 있습니다. 서비스가 그룹에 속하지 않는 경우 null 또는 빈 문자열을 지정합니다.

Dependencies

이 열은 이 서비스 전에 시스템이 시작해야 하는 서비스 또는 로드 순서 그룹의 이름 목록입니다. 목록의 이름을 Null로 구분합니다. 서비스에 종속성이 없는 경우 Null 또는 빈 문자열을 지정합니다. 구문 [~]을 사용하여 Null을 삽입합니다. 그룹에 대한 종속성은 그룹의 모든 멤버를 시작하는 시도 후 그룹의 구성원 중 하나 이상이 실행되는 경우 이 서비스를 실행할 수 있음을 의미합니다.

예를 들어 ServiceInstall 열에 나열된 서비스를 시작하기 전에 시스템에서 service1 및 service2를 시작하도록 요구하려면 종속성 열에 service1[~]service2[~][~]를 입력합니다. 식별자 service1 및 service2는 테이블의 기본 키에서 발생하거나 이미 설치된 서비스의 이름이어야 합니다.

그룹 이름에 +를 접두사로 지정하여 서비스 이름과 구분할 수 있어야 합니다. ServiceInstall 열에 나열된 서비스를 시작하기 전에 시스템에서 service1 및 주문 그룹 MyGroup의 하나 이상의 멤버를 시작하도록 요구하려면 service1[~]+MyGroup[~][~]을 입력합니다.

StartName

서비스는 이 열의 문자열에서 지정한 이름으로 로그온됩니다. 서비스 유형이 SERVICE_WIN32_OWN_PROCESS인 경우 DomainName\UserName 형식의 계정 이름을 사용합니다. 계정이 기본 제공 도메인에 속하는 경우 .\UserName을 지정할 수 있습니다. 서비스 유형이 SERVICE_WIN32_SHARE_PROCESS 또는 SERVICE_INTERACTIVE_PROCESS인 경우 LocalSystem 계정을 사용해야 합니다. StartName이 null로 지정되어 대부분의 서비스가 이 열을 비워 두면 CreateService 함수는 LocalSystem 계정을 사용합니다.

Password

이 문자열은 StartName 열에 지정된 계정 이름의 암호입니다. 사용자에게 서비스로 로그온할 수 있는 권한이 있어야 합니다. StartName이 null이거나 빈 문자열인 경우 서비스에 암호가 없습니다. LocalSystem의 Startname은 null이어서 이 인스턴스의 암호는 null이므로 대부분의 서비스는 이 열을 비워 둡니다.

사용자 이름 및 암호로 설치된 서비스를 삭제한 후에는 먼저 사용자 지정 작업을 사용하여 암호를 가져오지 않으면 설치 관리자가 서비스를 롤백할 수 없습니다. 설치 관리자는 암호를 제외하고 시스템의 보호된 부분에 저장된 서비스에 필요한 모든 정보를 가져올 수 있습니다. 사용자 지정 작업은 사용자에게 메시지를 표시하거나, 데이터베이스에서 속성을 읽거나, 파일을 읽어 암호를 획득합니다. 그런 다음 사용자 지정 작업은 서비스를 다시 설치하기 전에 ChangeServiceConfig를 호출하여 암호를 제공해야 합니다.

Windows Installer는 암호 필드에 입력한 값을 로그 파일에 쓰지 않습니다.

Arguments

이 열에는 서비스를 실행하는 데 필요한 명령줄 인수 또는 속성이 포함되어 있습니다.

Component_

구성 요소 테이블 중 하나의 열에 대한 외부 키입니다. InstallService 테이블을 사용하여 이 서비스를 설치하려면 이 구성 요소의 KeyPath가 서비스의 실행 파일이어야 합니다.

Description

이 열에는 구성 중인 서비스에 대한 지역화 가능한 설명이 포함되어 있습니다. 이 열을 비워 두면 설치 관리자가 서비스에 대한 기존 설명(있는 경우)을 사용합니다. 자세한 내용은 Microsoft Windows SDK(소프트웨어 개발 키트)의 SERVICE_DESCRIPTION을 참조하세요. 기존 설명을 지우려면 이 열에 “[~]”를 입력합니다. 그러면 새 서비스 또는 기존 서비스에 대한 빈 설명이 생성됩니다.

설명

시퀀스 테이블InstallServices 작업은 이 테이블의 정보를 처리합니다. 시퀀스 테이블 사용에 대한 자세한 내용은 시퀀스 테이블 사용을 참조하세요.

이 테이블에는 Win32 CreateService 함수에 대한 대부분의 매개 변수가 있습니다.

사용자 인터페이스를 사용하여 서비스를 원본에서 실행으로 설치하도록 지정하는 것이 가능하기는 하지만 설치 관리자는 실제로 이러한 유형의 설치를 지원하지 않습니다. 로컬 하드 드라이브에서 실행하려면 로컬 시스템의 권한 수준으로 실행되는 서비스를 설치해야 합니다. 보안 데이터를 로그 또는 시스템 레지스트리에 쓸 수 있으므로 특정 사용자의 권한을 가장하는 서비스를 설치하지 마세요. 이렇게 하면 시스템을 다시 시작할 때 보안 문제, 암호 충돌 또는 구성 데이터 손실이 발생할 가능성이 있습니다.

제거 중에 서비스를 삭제하려면 ServiceControl 테이블에 서비스에 대한 해당 레코드가 있어야 하며 msidbServiceControlEventUninstallDelete 플래그가 이벤트 열에 나타나야 합니다. 설치 관리자는 ServiceControl 테이블에 이 항목이 없으면 제거 중에 ServiceInstall 테이블에서 서비스를 삭제하지 않습니다.

서비스를 보호하는 방법에 대한 자세한 내용은 MsiLockPermissionsEx 테이블을 참조하세요.

유효성 검사

ICE03
ICE06
ICE32
ICE45
ICE46
ICE66
ICE69