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

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

기능 선택 상태 제어도 살펴보세요.

유효성 검사

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