다음을 통해 공유


구성 요소 테이블

구성 요소 테이블에는 구성 요소가 나열되고 다음 열이 있습니다.

열쇠 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
이 비트를 설정하면 KeyPath 열의 값이 Registry 테이블의 키로 사용됩니다. 레지스트리 테이블에 있는 해당 레코드의 값 필드가 null이면 해당 레코드의 이름 필드에 "+", "-" 또는 "*"가 포함되어서는 안 됩니다. 자세한 내용은 레지스트리 테이블이름 필드에 대한 설명을 참조하세요.
HKCU 하이브에 기록된 레지스트리 항목에는 이 비트를 설정하는 것이 좋습니다. 이렇게 하면 동일한 컴퓨터에 여러 사용자가 있는 경우 설치 관리자가 필요한 HKCU 레지스트리 항목을 작성합니다.
msidbComponentAttributesSharedDllRefCount
8
0x0008
이 비트가 설정되면 설치 관리자는 구성 요소의 키 파일의 공유 DLL 레지스트리에서 참조 수를 증분합니다. 이 비트를 설정하지 않으면 참조 수가 이미 있는 경우에만 설치 관리자가 참조 수를 증분합니다.
msidbComponentAttributesPermanent
16
0x0010
이 비트를 설정하면 설치 관리자가 제거 중에 구성 요소를 제거하지 않습니다. 설치 관리자는 Windows Installer 레지스트리 설정에서 구성 요소에 대한 추가 시스템 클라이언트를 등록합니다.
msidbComponentAttributesODBCDataSource
32
0x0020
이 비트가 설정되면 KeyPath 열의 값은 ODBCDataSource 테이블의 키입니다.
msidbComponentAttributesTransitive
64
0x0040
이 비트를 설정하면 설치 관리자는 다시 설치 시 조건 열에 있는 문의 값을 다시 평가합니다. 값이 이전에 False이고 True로 변경된 경우 설치 관리자가 구성 요소를 설치합니다. 값이 이전에 True이고 False로 변경된 경우 구성 요소에 다른 제품이 클라이언트로 있는 경우에도 설치 관리자가 구성 요소를 제거합니다.
이 비트는 전이적 구성 요소에 대해서만 설정해야 합니다. 전이적 구성 요소 사용하는참조하세요.
msidbComponentAttributesNeverOverwrite
128
0x0080
이 비트를 설정하면 구성 요소에 대한 키 경로 파일 또는 키 경로 레지스트리 항목이 이미 있는 경우 설치 관리자가 구성 요소를 설치하거나 다시 설치하지 않습니다. 애플리케이션은 구성 요소의 클라이언트로 자신을 등록합니다.
레지스트리 테이블에 등록되는 구성 요소에 대해서만 이 플래그를 사용합니다. AppId, 클래스, 확장, ProgId, MIME동사 테이블등록한 구성 요소에는 이 플래그를 사용하지 마세요.
msidbComponentAttributes64bit
256
0x0100
64비트 구성 요소로 표시하려면 이 비트를 설정합니다. 이 특성은 32비트 및 64비트 구성 요소를 모두 포함하는 패키지를 쉽게 설치할 수 있도록 합니다. 이 비트를 설정하지 않으면 구성 요소가 32비트 구성 요소로 등록됩니다.
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
컴퓨터에 분리된 구성 요소를 남기지 않도록 패치 패키지의 구성 요소에 대해 이 비트를 설정합니다. 후속 패치가 설치되어 msidbPatchSequenceSupersedeEarlier 값이 MsiPatchSequence 테이블에 표시되어 첫 번째 패치를 대체합니다. Windows Installer 4.5 이상에서는 msidbComponentAttributesUninstallOnSupersedence 값으로 표시된 구성 요소를 등록 취소하고 제거할 수 있습니다. 구성 요소가 이 비트로 표시되지 않으면 대체 패치를 설치하면 컴퓨터에서 사용되지 않는 구성 요소가 남을 수 있습니다.
MSIUNINSTALLSUPERSEDCOMPONENTS 속성을 설정하면 모든 구성 요소에 대해 이 비트를 설정하는 것과 같은 효과가 있습니다.
Windows Installer 4.0 및 이전:msidbComponentAttributesUninstallOnSupersedence 값은 지원되지 않으며 무시됩니다.

msidbComponentAttributesShared
2048
0x0800
구성 요소가 시스템에 설치된 하나 이상의 패키지에서 이 특성 값으로 표시된 경우 설치 관리자는 구성 요소를 모든 패키지에 표시된 것으로 처리합니다. 표시된 구성 요소를 공유하는 패키지가 제거된 경우 Windows Installer 4.5는 제거 중인 패키지에서 가장 높은 버전을 설치한 경우에도 시스템에서 가장 높은 버전의 구성 요소를 계속 공유할 수 있습니다.
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 대한 후속 호출이 실패하기 때문입니다.

또한 기능 선택 상태 제어 참조하세요.

유효성 검사

ICE02
ice03
ICE06
ICE07
ice08
ice09
ice18
ICE19
ICE21
ICE30
ICE32
ICE35
ICE38
ICE41
ICE42
ICE43
ICE46
ICE50
ICE54
ice57
ice59
ICE62
ICE67
ICE76
ice79
ICE80
ICE83
ice86
ice88
ICE91
ICE92
ICE97