Component 테이블
Component 테이블에는 구성 요소가 나열되고 다음 열이 있습니다.
Column | 형식 | 키 | Nullable |
---|---|---|---|
구성 요소 | 식별자 | Y | N |
ComponentId | GUID | N | Y |
Directory_ | 식별자 | N | N |
특성 | 정수 | N | N |
조건 | Condition | N | Y |
KeyPath | 식별자 | N | Y |
열
-
Component
-
구성 요소 레코드를 식별합니다.
기본 테이블 키입니다.
-
ComponentId
-
이 구성 요소, 버전 및 언어의 고유한 문자열 GUID입니다.
이러한 GUID의 문자는 대문자여야 합니다. GUIDGEN과 같은 유틸리티는 소문자를 포함하는 GUID를 생성할 수 있습니다. 이러한 구성 요소 코드 GUID가 유효하려면 소문자를 대문자로 변경해야 합니다.
이 열이 null이면 설치 관리자가 구성 요소를 등록하지 않으므로 설치 관리자가 구성 요소를 제거하거나 복구할 수 없습니다. 임시 파일을 정리하거나 이전 제품을 제거하는 사용자 지정 작업과 같이 설치하는 동안에만 구성 요소가 필요한 경우 이 작업을 의도적으로 수행할 수 있습니다. 등록할 필요가 없는 사용자의 컴퓨터에 데이터 파일을 복사할 때도 유용할 수 있습니다.
-
Directory_
-
Directory 테이블에 있는 항목의 외부 키입니다. 이 속성 이름의 값은 AppSearch 작업 또는 Directory 테이블에서 얻은 기본 설정으로 지정할 수 있는 실제 경로를 포함할 수 있습니다.
개발자는 파일을 User Profile 폴더 중 하나에 배치하는 작성 구성 요소를 사용하면 안 됩니다. 이러한 파일은 다중 사용자 상황에서 모든 사용자가 사용할 수 없으며 설치 관리자가 영구적으로 구성 요소를 복구해야 하는 것으로 볼 수 있습니다.
Directory 테이블의 1열에 대한 외부 키입니다.
-
Attributes
-
이 열에는 원격 실행 옵션을 지정하는 비트 플래그가 포함되어 있습니다. 옵션을 포함하려면 열의 합계에 표시된 비트를 추가합니다.
참고
웹 위치에서 다운로드되는 .msi 파일의 경우 구성 요소를 원본에서 실행할 수 있도록 특성 플래그를 설정하면 안 됩니다. 이는 Windows Installer의 제한 사항이며 INSTALLSTATE_BADCONFIG 기능 상태를 반환할 수 있습니다.
비트 플래그 - msidbComponentAttributesLocalOnly
- 0
- 0x0000
- msidbComponentAttributesSourceOnly
- 1
- 0x0001
- msidbComponentAttributesOptional
- 2
- 0x0002
- msidbComponentAttributesRegistryKeyPath
- 4
- 0x0004
HKCU 하이브에 기록된 레지스트리 항목에는 이 비트를 설정하는 것이 좋습니다. 그러면 설치 관리자는 동일한 머신에 여러 사용자가 있을 때 필요한 HKCU 레지스트리 항목을 기록합니다.- msidbComponentAttributesSharedDllRefCount
- 8
- 0x0008
- msidbComponentAttributesPermanent
- 16
- 0x0010
- msidbComponentAttributesODBCDataSource
- 32
- 0x0020
- msidbComponentAttributesTransitive
- 64
- 0x0040
이 비트는 전이적 구성 요소에 대해서만 설정해야 합니다. 전이적 구성 요소 사용을 참조하세요.- msidbComponentAttributesNeverOverwrite
- 128
- 0x0080
Registry 테이블에 등록되는 구성 요소에만 이 플래그를 사용하세요. AppId, Class, Extension, ProgId, MIME 및 Verb 테이블에 등록된 구성 요소에는 이 플래그를 사용하지 마세요.- msidbComponentAttributes64bit
- 256
- 0x0100
32비트 구성 요소를 대체하는 64비트 구성 요소인 경우 이 비트를 설정하고 ComponentId 열에서 새 GUID를 할당합니다.msidbComponentAttributesDisableRegistryReflection
512
0x0200
이 구성 요소의 영향을 받는 모든 기존 및 새 레지스트리 키에서 레지스트리 리플렉션을 사용하지 않으려면 이 비트를 설정합니다. 이 비트가 설정되면 Windows Installer는 구성 요소가 액세스하는 각 키에서 RegDisableReflectionKey를 호출합니다. 이 비트는 Windows Installer 버전 4.0에서 사용할 수 있습니다. 이 비트는 32비트 시스템에서 무시됩니다. 이 비트는 Windows XP 64비트 버전에서 무시됩니다.
참고: 64비트 Windows 에뮬레이터(WOW64)에서 실행되는 32비트 Windows 애플리케이션은 64비트 애플리케이션과 다른 레지스트리 보기를 나타냅니다. 레지스트리 리플렉션은 이러한 두 레지스트리 보기 간에 일부 레지스트리 값을 복사합니다.- msidbComponentAttributesUninstallOnSupersedence
- 1024
- 0x0400
MSIUNINSTALLSUPERSEDEDCOMPONENTS 속성을 설정하면 모든 구성 요소에 대해 이 비트를 설정하는 것과 동일한 효과가 있습니다.
Windows Installer 4.0 이하:msidbComponentAttributesUninstallOnSupersedence 값은 지원되지 않으며 무시됩니다.- msidbComponentAttributesShared
- 2048
- 0x0800
DisableSharedComponent 정책이 1로 설정되면 그 어떤 패키지도 이 비트에서 사용하도록 설정된 공유 구성 요소 기능을 가져오지 않습니다.
Windows Installer 4.0 이하:msidbComponentAttributesShared 값은 지원되지 않으며 무시됩니다. -
Condition
-
이 열에는 구성 요소가 설치되어 있는지 여부를 제어할 수 있는 조건문이 포함되어 있습니다. 조건이 null이거나 true로 평가되면 구성 요소가 활성화됩니다. 조건이 False로 평가되면 구성 요소가 비활성화되고 설치되지 않습니다.
조건 필드는 CostFinalize 작업 중에만 구성 요소를 사용하거나 사용하지 않도록 설정합니다. CostFinalize 후에 구성 요소를 사용하거나 사용하지 않도록 설정하려면 사용자 지정 작업 또는 DoAction ControlEvent를 사용하여 MsiSetComponentState를 호출해야 합니다.
Attributes 열의 전이적 비트가 구성 요소에 대해 설정되지 않은 경우 이후에 제품의 후속 유지 관리 설치에서 조건 열의 조건문이 False로 평가되더라도 구성 요소는 일단 설치되면 활성화된 상태로 유지됩니다.
Component 테이블의 Condition 열은 설치된 기능 및 구성 요소의 참조가 포함된 조건식을 허용합니다. 조건문 구문에 대한 자세한 내용은 조건문 구문을 참조하세요.
-
KeyPath
-
이 값은 설치 관리자가 구성 요소를 검색하는 데 사용하는 구성 요소에 속하는 파일 또는 폴더를 가리킵니다. 두 구성 요소는 동일한 키 경로 값을 공유할 수 없습니다. 이 열의 값은 MsiGetComponentPath 함수에서 반환하는 경로이기도 합니다.
값이 null이 아닌 경우 KeyPath는 특성 값에 따라 Registry, ODBCDataSource 또는 File 테이블의 기본 키입니다. KeyPath가 null이면 Directory_ 열의 폴더가 키 경로로 사용됩니다.
설치 관리자가 만든 폴더는 비어 있을 때 삭제되므로 CreateFolder 테이블에 대한 항목을 작성하여 빈 폴더로 구성된 구성 요소를 설치해야 합니다.
Windows Installer 구성 요소에 WRP(Windows Resource Protection)로 보호되는 파일이나 레지스트리 키 또는 WFP(Windows File Protection)로 보호되는 파일이 들어 있으면 이 리소스를 구성 요소의 KeyPath로 사용해야 합니다. 이 경우 Windows Installer는 구성 요소를 설치, 업데이트 또는 제거하지 않습니다. 보호된 리소스를 설치 패키지에 포함해서는 안 됩니다. 대신 Windows 리소스 보호에 지원되는 리소스 교체 메커니즘을 사용해야 합니다. 자세한 내용은 Windows Installer 및 Windows 리소스 보호 사용을 참조하세요.
설명
구성 요소와 기능 간의 관계에 대한 내용은 Feature 테이블을 참조하세요.
설치 관리자는 레지스트리의 공유 DLL 참조 카운트에 상관없이 공유 DLL을 추적합니다. 공유 DLL의 참조 카운트가 레지스트리에 있는 경우 설치 관리자는 항상 파일을 설치할 때에는 카운트를 늘리고 제거할 때에는 카운트를 줄입니다. msidbComponentAttributesSharedDllRefCount가 설정되지 않고 참조 카운트가 아직 없는 경우 설치 관리자는 참조 카운트를 만들지 않습니다. 레지스트리의 SharedDLL 참조 카운트는 System 폴더에 파일이 설치될 때마다 증가합니다.
msidbComponentAttributesSharedDllRefCount가 설정되지 않으면 여전히 필요한 구성 요소를 다른 애플리케이션이 제거할 수도 있습니다. 어떤 경우에 이 상황이 발생할 수 있는지 알아보려면 다음 시나리오를 살펴보세요.
- 설치 관리자를 사용하는 애플리케이션이 공유 구성 요소를 설치합니다.
- msidbComponentAttributesSharedDllRefCount 비트가 설정되지 않았으며 참조 카운트가 없습니다. 따라서 설치 관리자는 참조 카운트를 시작하지 않습니다.
- 이 구성 요소를 공유하고 설치 관리자를 사용하지 않는 레거시 애플리케이션이 설치됩니다.
- 레거시 애플리케이션이 공유 구성 요소의 참조 카운트를 만들고 증가시킵니다.
- 레거시 애플리케이션이 제거됩니다.
- 공유 구성 요소의 참조 카운트가 0으로 감소하고 구성 요소가 제거됩니다.
- 설치 관리자를 사용하는 애플리케이션은 더 이상 구성 요소에 액세스할 수 없습니다.
이 동작을 방지하려면 msidbComponentAttributesSharedDllRefCount를 설정합니다.
시스템 서비스 구성 요소는 이러한 용도로 특별히 설계되지 않는 한 원본에서 실행으로 지정하면 안 됩니다. 자세한 내용은 ServiceInstall 테이블을 참조하세요.
원본에서 실행 설치를 사용하는 특성은 시스템 폴더로 이동하는 동적 링크 라이브러리가 있는 구성 요소에는 절대 설정하면 안 됩니다. 기능을 따라 또는 UI에서 설정하여 구성 요소의 설치 상태가 원본에서 실행으로 설정되면 DLL에서 후속 LoadLibrary 호출이 실패하기 때문입니다.
기능 선택 상태 제어도 살펴보세요.