구성 요소 테이블
구성 요소 테이블에는 구성 요소가 나열되고 다음 열이 있습니다.
열 | 형 | 열쇠 | Nullable |
---|---|---|---|
구성 요소 | 식별자 | Y | N |
ComponentId | GUID | N | Y |
디렉토리_ | 식별자 | N | N |
특성 | 정수 | N | N |
조건 | 조건 | N | Y |
KeyPath | 식별자 | N | Y |
열
-
구성 요소
-
구성 요소 레코드를 식별합니다.
기본 테이블 키입니다.
-
ComponentId
-
이 구성 요소, 버전 및 언어에 고유한 문자열 GUID입니다.
이러한 GUID의 문자는 대문자여야 합니다. GUIDGEN과 같은 유틸리티는 소문자를 포함하는 GUID를 생성할 수 있습니다. 이러한 유효한 구성 요소 코드 GUID를 만들려면 소문자를 대문자로 변경해야 합니다.
이 열이 null이면 설치 관리자가 구성 요소를 등록하지 않으며 설치 관리자가 구성 요소를 제거하거나 복구할 수 없습니다. 이 작업은 임시 파일을 정리하거나 이전 제품을 제거하는 사용자 지정 작업과 같이 설치 중에만 구성 요소가 필요한 경우에 의도적으로 수행될 수 있습니다. 등록할 필요가 없는 사용자의 컴퓨터에 데이터 파일을 복사할 때도 유용할 수 있습니다.
-
Directory_
-
디렉터리 테이블에 있는 항목의 외부 키가. 값에 실제 경로가 포함된 속성 이름이며, AppSearch 작업 또는 디렉터리 테이블에서 가져온 기본 설정을 사용하여 설정할 수 있습니다.
개발자는 파일을 사용자 프로필 폴더 중 하나에 배치하는 구성 요소를 작성하지 않아야 합니다. 이러한 파일은 다중 사용자 상황에서 모든 사용자가 사용할 수 없으며 설치 관리자가 구성 요소를 복구해야 하는 것으로 영구적으로 볼 수 있습니다.
디렉터리 테이블 중 하나의 열에 대한 외부 키입니다.
-
특성
-
이 열에는 원격 실행 옵션을 지정하는 비트 플래그가 포함되어 있습니다. 지정된 비트를 열의 총 값에 추가하여 옵션을 포함합니다.
메모
웹 위치에서 다운로드되는 .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
레지스트리 테이블에 등록되는 구성 요소에 대해서만 이 플래그를 사용합니다. AppId, 클래스, 확장, ProgId, MIME및 동사 테이블등록한 구성 요소에는 이 플래그를 사용하지 마세요.- 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
MSIUNINSTALLSUPERSEDCOMPONENTS 속성을 설정하면 모든 구성 요소에 대해 이 비트를 설정하는 것과 같은 효과가 있습니다.
Windows Installer 4.0 및 이전:msidbComponentAttributesUninstallOnSupersedence 값은 지원되지 않으며 무시됩니다.- msidbComponentAttributesShared
- 2048
- 0x0800
DisableSharedComponent 정책이 1로 설정된 경우 이 비트에서 사용하도록 설정된 공유 구성 요소 기능을 패키지가 가져오지 않습니다.
Windows Installer 4.0 및 이전:msidbComponentAttributesShared 값은 지원되지 않으며 무시됩니다. -
조건
-
이 열에는 구성 요소 설치 여부를 제어할 수 있는 조건문이 포함되어 있습니다. 조건이 null이거나 true로 평가되면 구성 요소가 활성화됩니다. 조건이 False로 평가되면 구성 요소가 비활성화되고 설치되지 않습니다.
조건 필드는 CostFinalize 작업동안에만 구성 요소를 사용하거나 사용하지 않도록 설정합니다. CostFinalize 후에 구성 요소를 사용하거나 사용하지 않도록 설정하려면 사용자 지정 작업 또는 DoAction ControlEvent 사용하여 MsiSetComponentState호출해야 합니다.
특성 열의 전이적 비트가 구성 요소에 대해 설정되지 않는 한, 조건 열의 조건문이 나중에 제품의 후속 유지 관리 설치 시 False로 평가되더라도 구성 요소가 설치되면 계속 사용하도록 설정됩니다.
구성 요소 테이블의 조건 열은 설치된 기능 및 구성 요소 상태에 대한 참조를 포함하는 조건식을 허용합니다. 조건문 구문에 대한 자세한 내용은 조건문 구문참조하세요.
-
KeyPath
-
이 값은 설치 관리자가 구성 요소를 검색하는 데 사용하는 구성 요소에 속하는 파일 또는 폴더를 가리킵니다. 두 구성 요소는 동일한 키 경로 값을 공유할 수 없습니다. 이 열의 값은 MsiGetComponentPath 함수에서 반환되는 경로이기도 합니다.
값이 null이 아닌 경우 KeyPath는 레지스트리기본 키, ODBCDataSource또는 특성 값에 따라 파일 테이블을. KeyPath가 null이면 Directory_ 열의 폴더가 키 경로로 사용됩니다.
설치 관리자가 만든 폴더는 비어 있을 때 삭제되므로 CreateFolder 테이블 항목을 작성하여 빈 폴더로 구성된 구성 요소를 설치해야 합니다.
Windows Installer 구성 요소에 WRP(Windows Resource Protection) 또는 WFP(Windows 파일 보호)로 보호되는 파일 또는 레지스트리 키가 포함된 경우 이 리소스를 구성 요소의 KeyPath로 사용해야 합니다. 이 경우 Windows Installer는 구성 요소를 설치, 업데이트 또는 제거하지 않습니다. 보호된 리소스를 설치 패키지에 포함해서는 안 됩니다. 대신 Windows 리소스 보호에 지원되는 리소스 교체 메커니즘을 사용해야 합니다. 자세한 내용은 Windows Installer 및 Windows Resource Protection 사용하는참조하세요.
발언
구성 요소와 기능 간의 관계에 대한 자세한 내용은 기능 테이블참조하세요.
설치 관리자는 레지스트리의 공유 DLL 참조 수와 독립적으로 공유 DLL을 추적합니다. 공유 DLL에 대한 참조 수가 레지스트리에 있는 경우 설치 관리자는 파일을 설치할 때 항상 개수를 증가시키고 제거 시 감소합니다. msidbComponentAttributesSharedDllRefCount설정되지 않은 경우 참조 수가 아직 없으면 설치 관리자가 생성되지 않습니다. 레지스트리의 SharedDLL 참조 수는 시스템 폴더에 설치된 모든 파일에 대해 증가합니다.
msidbComponentAttributesSharedDllRefCount 설정되지 않은 경우 다른 애플리케이션은 여전히 필요한 경우에도 구성 요소를 제거할 수 있습니다. 이런 일이 어떻게 발생할 수 있는지 확인하려면 다음 시나리오를 고려하세요.
- 설치 관리자를 사용하는 애플리케이션은 공유 구성 요소를 설치합니다.
- msidbComponentAttributesSharedDllRefCount 비트가 설정되지 않았으며 참조 수가 없습니다. 따라서 설치 관리자는 참조 횟수를 시작하지 않습니다.
- 이 구성 요소를 공유하고 설치 관리자를 사용하지 않는 레거시 애플리케이션이 설치됩니다.
- 레거시 애플리케이션은 공유 구성 요소에 대한 참조 수를 만들고 증가합니다.
- 레거시 애플리케이션이 제거됩니다.
- 공유 구성 요소에 대한 참조 수가 0으로 감소하고 구성 요소가 제거됩니다.
- 설치 관리자를 사용하는 애플리케이션은 더 이상 구성 요소에 액세스할 수 없습니다.
이 동작을 방지하려면 msidbComponentAttributesSharedDllRefCount 설정합니다.
시스템 서비스 구성 요소는 이러한 사용을 위해 특별히 설계되지 않고 원본에서 실행으로 지정해서는 안 됩니다. 자세한 내용은 ServiceInstall 테이블 참조하세요.
시스템 폴더로 이동 중인 동적 연결 라이브러리를 포함하는 구성 요소에 대해서는 원본에서 실행 설치를 사용하도록 설정하는 특성을 설정해서는 안 됩니다. 그 이유는 기능을 따르거나 UI에서 설정하여 구성 요소의 설치 상태가 원본에서 실행되도록 설정되면 DLL에서 LoadLibrary 대한 후속 호출이 실패하기 때문입니다.