설치에 캐비닛 파일 포함
이 섹션에서는 설치에 캐비닛 파일을 포함하는 방법을 설명합니다. 자세한 내용은 캐비닛 및 압축된 원본 사용을 참조하세요.
설치 패키지에 캐비닛 파일을 포함하려면
- 캐비닛 만들기 도구를 사용하여 원본 파일을 캐비닛 파일로 압축합니다. 캐비닛 파일을 참조하세요.
- 캐비닛 파일은 .msi 파일 내의 데이터 스트림 또는 Directory 테이블에 지정된 원본 트리의 루트에 있는 별도의 캐비닛 파일에 있어야 합니다.
- 원본이 압축된 형식인지 또는 압축되지 않은 파일과 압축된 파일이 모두 있는 혼합 형식인지 확인합니다. 압축된 원본과 압축되지 않은 원본을 참조하세요. 원본 이미지의 유형에 따라 단어 수 요약 속성의 압축됨 또는 압축되지 않음 플래그 비트를 설정합니다.
- 캐비닛의 각 파일에 대해 File 테이블에 레코드를 추가합니다. 캐비닛에 있는 파일의 파일 키와 정확히 일치하는 파일 키를 File 열에 입력합니다. 파일 키는 대/소문자를 구분합니다. File 테이블과 캐비닛의 파일 설치 시퀀스도 동일해야 합니다. 파일 시퀀스는 Sequence 열의 시퀀스 번호로 지정됩니다. 캐비닛에서 첫 번째 파일의 시퀀스 번호에 도달하려면 다음을 수행합니다. DiskID 열에서 가장 큰 값을 갖는 기존 레코드를 Media 테이블에서 찾습니다. 이 레코드의 LastSequence 필드는 미디어에 사용된 마지막 파일 시퀀스 번호를 제공합니다. File 테이블에서 새 캐비닛의 첫 번째 파일에 이보다 큰 시퀀스 번호를 할당합니다. 캐비닛 파일과 동일한 순서로 나머지 모든 파일에 시퀀스 번호를 할당합니다. 나머지 레코드 필드에 대한 설명은 File 테이블을 참조하세요.
- 캐비닛의 Media 테이블에 레코드를 추가합니다. 테이블에 이미 있는 가장 큰 DiskID 값보다 큰 값을 이 새 레코드의 DiskID 필드에 지정합니다. 캐비닛의 이름을 Cabinet 필드에 넣습니다. 이 이름은 캐비닛 데이터 형식이어야 합니다. 캐비닛이 .msi 파일에 저장된 데이터 스트림인 경우 이름 앞에 숫자 기호 "#"을 접두사로 지정합니다. 캐비닛이 데이터 스트림인 경우 캐비닛 이름은 대/소문자를 구분합니다. 캐비닛이 개별 파일인 경우 파일 이름은 대/소문자를 구분하지 않습니다.
- 업데이트된 File 테이블의 Sequence 열을 확인하여 새 캐비닛에서 가장 큰 파일 시퀀스 번호를 확인합니다. 이 값보다 큰 값을 Media 테이블의 새 레코드의 LastSequence 필드에 입력합니다. 나머지 레코드 필드에 대한 설명은 Media 테이블을 참조하세요.
- Msidb.exe와 같은 도구를 사용하거나 설치 관리자의 데이터베이스 함수를 사용하여 설치 패키지에 캐비닛 파일을 저장할 수 있습니다. 다음 네 단계에서는 데이터베이스 함수를 사용하여 프로그램에서 캐비닛을 추가하는 방법을 설명합니다.
- 프로그램의 설치 패키지에 캐비닛을 추가하려면 MsiDatabaseOpenView를 사용하여 데이터베이스의 _Streams 테이블에서 보기를 엽니다.
- MsiRecordSetString을 사용하여 _Streams 테이블의 Name 열을 Media 테이블의 Cabinet 열에 표시되는 이름으로 설정합니다. 숫자 기호 #은 생략합니다.
- MsiRecordSetStream을 사용하여 _Streams 테이블의 Data 열을 캐비닛의 데이터로 설정합니다.
- MsiViewModify를 사용하여 _Streams 테이블의 레코드를 업데이트합니다.
- Msidb.exe를 사용하여 Mydatabase.msi라는 설치 패키지에 Mycab.cab 캐비닛 파일을 추가하려면 Msidb.exe -d mydatabase.msi -a mycab.cab 명령줄을 사용합니다. 이 경우 Media 테이블의 Cabinet 열에는 #mycab.cab 문자열이 포함되어야 합니다.