캐비닛, 파일 테이블 및 미디어 테이블에서 파일 시퀀스 번호 정렬
파일 테이블에는 설치를 위한 모든 원본 파일의 전체 목록이 포함되어 있습니다. 파일은 원본 미디어에 개별 파일로 저장하거나 캐비닛 파일 내에서 압축할 수 있습니다. 파일 테이블의 시퀀스 열에 있는 시퀀스 번호와 미디어 테이블의 LastSequence 필드는 파일의 설치 순서와 각 파일이 있는 원본 미디어를 모두 지정합니다. 미디어 테이블의 각 레코드는 시퀀스 번호가 LastSequence 열에 표시된 값보다 작거나 같고 이전 디스크의 LastSequence 값보다 큰 모든 파일이 포함된 원본 디스크를 식별합니다.
예를 들어 파일에 파일 테이블의 시퀀스 열에 입력된 시퀀스 번호가 92개라고 가정해보겠습니다. 이 파일이 있는 원본 디스크를 확인하기 위해 설치 관리자는 92보다 큰 LastSequence의 최소 값이 있는 항목에 대한 미디어 테이블의 레코드를 확인합니다. DiskId 열은 미디어 테이블의 기본 키이며 이 필드는 테이블의 디스크를 고유하게 식별합니다.
Windows Installer 패키지의 파일 테이블에 나열할 수 있는 파일 수의 최대 한도는 32767개 파일입니다. 더 많은 파일이 포함된 Windows Installer 패키지를 만들려면 대규모 패키지 작성을 참조하세요.
패키지 작성자는 원본 파일을 압축하고 캐비닛 파일에 포함하여 설치 패키지의 크기를 줄일 수 있습니다. 소스 파일 이미지는 압축, 압축 해제 또는 두 형식을 혼합할 수 있습니다. 압축 및 압축되지 않은 원본에 대한 자세한 내용은 압축 및 압축되지 않은 원본을 참조하세요. 압축된 원본 파일은 캐비닛 파일 내에 저장해야 합니다. 캐비닛 내의 압축된 파일에는 자체 내부 시퀀스 번호가 있습니다. 이러한 내부 시퀀스 번호의 값은 파일 테이블 내의 시퀀스 번호 값과 일치할 필요가 없습니다. 그러나 파일 테이블에 지정된 파일의 시퀀스는 캐비닛 내 파일의 실제 시퀀스와 동일해야 합니다. 압축되지 않은 파일의 시퀀스 번호는 고유할 필요가 없습니다. 예를 들어 모든 파일이 압축되지 않고 한 디스크에 있는 경우 모든 파일은 파일 테이블에 동일한 시퀀스 번호를 가질 수 있습니다.
미디어 테이블에서는 설치를 위해 원본 미디어를 구성하는 디스크 집합에 대해 설명합니다. 미디어 테이블의 첫 번째 항목에는 DiskId 필드에 항상 1이 있어야 합니다. 원본 미디어에서 파일을 구성하여 디스크 1의 모든 파일에 디스크 2의 파일 시퀀스 번호보다 작은 파일 테이블 시퀀스 번호가 있고 디스크 2의 모든 시퀀스 번호가 디스크 3보다 작도록 해야 합니다. 이 요구 사항은 압축 및 압축되지 않은 원본이 모두 포함된 디스크에도 적용됩니다. 예를 들어 설치를 위한 미디어 원본이 두 원본 디스크에 있고 디스크 1에 압축되지 않은 파일과 캐비닛 파일이 모두 포함된 경우 압축되지 않은 파일과 캐비닛의 파일 모두 디스크 2에 저장된 파일의 가장 작은 파일 시퀀스 번호보다 작은 시퀀스 번호가 있어야 합니다. 디스크 1의 모든 파일이 캐비닛 파일에서 압축되면 다음 테이블과 같이 미디어 테이블을 작성할 수 있습니다.
미디어 테이블(부분)
DiskId | LastSequence | DiskPrompt | 캐비닛 | VolumeLabel |
---|---|---|---|---|
1 | 5 | 1 | mycab.cab | 디스크 1 |
2 | 10 | 2 | 디스크 2 |
디스크 1의 일부 파일이 캐비닛에서 압축되고 일부는 압축되지 않은 경우 다음과 같이 미디어 테이블을 작성할 수 있습니다.
미디어 테이블(부분)
DiskId | LastSequence | DiskPrompt | 캐비닛 | VolumeLabel |
---|---|---|---|---|
1 | 5 | 1 | 디스크 1 | |
2 | 10 | 1 | mycab.cab | 디스크 1 |
3 | 15 | 2 | 디스크 2 |
다음 미디어 테이블의 작성은 디스크 2의 일부 파일 시퀀스 번호를 디스크 1의 캐비닛 내의 일부 파일보다 작게 지정하기 때문에 잘못되었습니다.
DiskId | LastSequence | DiskPrompt | 캐비닛 | VolumeLabel |
---|---|---|---|---|
1 | 5 | 1 | 디스크 1 | |
2 | 10 | 2 | 디스크 2 | |
3 | 15 | 1 | mycab.cab | 디스크 1 |
대용량 파일은 둘 이상의 캐비닛 파일 간에 분할할 수 있습니다. 다음 캐비닛 파일에 걸쳐 있는 하나의 캐비닛 파일에는 15개 이하의 파일이 있을 수 있습니다. 예를 들어 3개의 캐비닛 파일이 있는 경우 첫 번째 캐비닛에는 두 번째 캐비닛 파일에 걸쳐 있는 15개의 파일이 있을 수 있고 두 번째 캐비닛에는 세 번째 캐비닛 파일에 걸쳐 있는 15개의 파일이 있을 수 있습니다. 여러 파일 캐비닛의 파일 테이블에 레코드를 추가하는 경우 파일의 첫 번째 부분을 사용하여 시퀀스 열에 입력한 파일 시퀀스 번호를 지정합니다.
파일 및 미디어 테이블은 파일 3개, 캐비닛 2개, 디스크 2개가 있는 경우 다음과 같이 작성할 수 있습니다. 이 샘플에서는 c1.cab이 disk1에 있고 c2.cab가 disk2에 있습니다. 파일 f2는 두 캐비닛에 걸쳐 있습니다. c1.cab 캐비닛에는 전체 f1 파일과 f2 파일의 첫 번째 부분이 포함됩니다. c2.cab 캐비닛에는 f2의 두 번째 부분과 전체 f3 파일이 포함되어 있습니다.
미디어 테이블(부분)
DiskId | LastSequence | DiskPrompt | 캐비닛 | VolumeLabel |
---|---|---|---|---|
1 | 5 | 1 | c1.cab | 디스크 1 |
2 | 10 | 2 | c2.cab | 디스크 2 |
파일 테이블(부분)
파일 | 시퀀스 |
---|---|
f1 | 1 |
f2 | 2 |
f3 | 6 |