구성 요소 테이블

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

Column 형식 Nullable
구성 요소 식별자 Y N
ComponentId GUID N Y
디렉터리_ 식별자 N N
특성 Integer N N
조건 Condition N Y
Keypath 식별자 N Y

구성 요소

구성 요소 레코드를 식별합니다.

기본 테이블 키입니다.

ComponentId

이 구성 요소, 버전 및 언어에 고유한 문자열 GUID입니다.

이러한GUID의 문자는 대문자여야 합니다. GUIDGEN과 같은 유틸리티는 소문자를 포함하는 GUID를 생성할 수 있습니다. 이러한 유효한 구성 요소 코드GUID를 만들려면 소문자를 대문자로 변경해야 합니다.

이 열이 null이면 설치 관리자가 구성 요소를 등록하지 않으며 설치 관리자가 구성 요소를 제거하거나 복구할 수 없습니다. 임시 파일을 정리하거나 이전 제품을 제거하는 사용자 지정 작업과 같이 설치하는 동안에만 구성 요소가 필요한 경우 이 작업이 의도적으로 수행될 수 있습니다. 등록할 필요가 없는 사용자의 컴퓨터에 데이터 파일을 복사할 때도 유용할 수 있습니다.

디렉터리_

디렉터리 테이블에 있는 항목의 외부 키입니다. AppSearch 작업 또는 디렉터리 테이블에서 가져온 기본 설정으로 설정할 수 있는 실제 경로가 값에 포함된 속성 이름입니다.

개발자는 파일을 사용자 프로필 폴더 중 하나에 배치하는 구성 요소를 작성하지 않아야 합니다. 이러한 파일은 다중 사용자 상황에서 모든 사용자가 사용할 수 없으며 설치 관리자가 복구가 필요한 구성 요소를 영구적으로 볼 수 있습니다.

디렉터리 테이블 중 하나의 열에 대한 외부 키입니다.

특성

이 열에는 원격 실행 옵션을 지정하는 비트 플래그가 포함되어 있습니다. 지정된 비트를 열의 총 값에 추가하여 옵션을 포함합니다.

참고

웹 위치에서 다운로드되는 .msi 파일의 경우 구성 요소를 소스에서 실행할 수 있도록 특성 플래그를 설정하면 안 됩니다. 이는 Windows 설치 관리자의 제한 사항이며 INSTALLSTATE BADCONFIG의 기능 상태를 반환할 수 _ 있습니다.

비트 플래그
msidbComponentAttributesLocalOnly
0
0x0000
원본에서 구성 요소를 실행할 수 없습니다. 기능에 속하는 모든 구성 요소에 대해 이 비트를 설정하여 기능이 네트워크에서 실행되거나 소스에서 실행되지 않도록 합니다. 기능에 구성 요소가 없는 경우 이 기능은 항상 원본에서 실행 및 my-computer에서 실행을 유효한 옵션으로 표시합니다.
msidbComponentAttributesSourceOnly
1
0x0001
구성 요소는 원본에서만 실행할 수 있습니다. 기능에 속한 모든 구성 요소에 대해 이 비트를 설정하여 기능이 my-computer에서 실행되지 않도록 합니다. 기능에 구성 요소가 없는 경우 이 기능은 항상 원본에서 실행 및 my-computer에서 실행을 유효한 옵션으로 표시합니다.
msidbComponentAttributesOptional
2
0x0002
구성 요소는 로컬로 또는 원본에서 실행할 수 있습니다.
msidbComponentAttributesRegistryKeyPath
4
0x0004
이 비트를 설정하면 KeyPath 열의 값이 레지스트리 테이블의 키로 사용됩니다. 레지스트리 테이블에 있는 해당 레코드의 값 필드가 null이면 해당 레코드의 이름 필드에 "+", "-" 또는 "*"가 포함되지 않아야 합니다. 자세한 내용은 레지스트리 테이블 의 이름 필드에 대한 설명을 참조하세요.
HKCU 하이브에 기록된 레지스트리 항목에는 이 비트를 설정하는 것이 좋습니다. 이렇게 하면 동일한 컴퓨터에 사용자가 여러 명 있을 때 설치 관리자가 필요한 HKCU 레지스트리 항목을 작성합니다.
msidbComponentAttributesSharedDllRefCount
8
0x0008
이 비트를 설정하면 설치 관리자가 구성 요소 키 파일의 공유 DLL 레지스트리에서 참조 횟수를 증분합니다. 이 비트를 설정하지 않으면 참조 횟수가 이미 있는 경우에만 설치 관리자가 참조 횟수를 증분합니다.
msidbComponentAttributesPermanent
16
0x0010
이 비트를 설정하면 설치 관리자가 제거 중에 구성 요소를 제거하지 않습니다. 설치 관리자가 Windows 설치 관리자 레지스트리 설정에서 구성 요소에 대한 추가 시스템 클라이언트를 등록합니다.
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 설치 관리자가 구성 요소에서 액세스하는 각 키에 대해 RegDisableReflectionKey를 호출합니다. 이 비트는 Windows Installer 버전 4.0에서 사용할 수 있습니다. 이 비트는 32비트 시스템에서 무시됩니다. 이 비트는 64비트 버전의 Windows XP에서 무시됩니다.
[!Note]
64비트 Windows 에뮬레이터(WOW64)에서 실행되는 32비트 Windows 애플리케이션은 64비트 애플리케이션과 다른 레지스트리 보기를 나타냅니다. 레지스트리 리플렉션은 이러한 두 레지스트리 뷰 간에 일부 레지스트리 값을 복사합니다.


msidbComponentAttributesUninstallOnSupersedence
1024
0x0400
컴퓨터에 분리된 구성 요소를 남겨 두지 않도록 패치 패키지의 구성 요소에 대해 이 비트를 설정합니다. 첫 번째 패치를 대체하기 위해 MsiPatchSequence 테이블에 msidbPatchSequenceSupersedeEarlier 값으로 표시된 후속 패치가 설치된 경우 설치 관리자 4.5 이상에서는 msidbComponentAttributesUninstallOnSupersedence 값으로 표시된 구성 요소를 등록 취소하고 제거할 수 Windows. 구성 요소가 이 비트로 표시되지 않으면 대체 패치를 설치하면 컴퓨터에서 사용되지 않는 구성 요소가 남을 수 있습니다.
MSIUNINSTALLSUPERSEDCOMPONENTS 속성을 설정해도 모든 구성 요소에 대해 이 비트를 설정하는 것과 동일한 효과가 있습니다.
Windows Installer 4.0 이하: msidbComponentAttributesUninstallOnSupersedence 값은 지원되지 않으며 무시됩니다.

msidbComponentAttributesShared
2048
0x0800
구성 요소가 시스템에 설치된 하나 이상의 패키지에서 이 특성 값으로 표시되면 설치 관리자가 구성 요소를 모든 패키지에 표시된 대로 처리합니다. 표시된 구성 요소를 공유하는 패키지가 제거된 경우 Windows 설치 관리자 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 설치 관리자 구성 요소에 WRP(Windows Resource Protection)로 보호되는 파일 또는 레지스트리 키 또는 WFP(Windows 파일 보호)로 보호되는 파일이 포함된 경우 이 리소스를 구성 요소의 KeyPath로 사용해야 합니다. 이 경우 Windows 설치 관리자가 구성 요소를 설치, 업데이트 또는 제거하지 않습니다. 보호된 리소스는 설치 패키지에 포함하면 안 됩니다. 대신 Windows Resource Protection에 지원되는 리소스 대체 메커니즘을 사용해야 합니다. 자세한 내용은 Windows 설치 관리자 사용 및 리소스 보호 Windows 참조하세요.

설명

구성 요소와 기능 간의 관계에 대한 자세한 내용은 기능 테이블을 참조하세요.

설치 관리자가 레지스트리의 공유 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