상세 차례
장 아래 절까지 펼친 차례다. 찾는 자리를 바로 짚을 때 쓴다.
장과 절의 제목에서 찾는다 - 본문 전체가 아니다
제1부 - 따라 하며 배우기
3.1모든 판에 원본 하나3.2Windows 는 두 판을 어떻게 다루나3.3판 번호3.4두 식별자3.5사용자보다 먼저 업그레이드를 확인하기3.6작은 수정을 패치로: patch3.7다른 도구로 만든 옛 판3.8제품과 함께 가는 추가 기능
4.1폴더4.2원본4.3폴더: [dir.ID]4.4파일 하나: [file.ID]4.5여러 파일: [files.ID]4.6빈 폴더: [folder.ID]4.7치우기: [remove.ID]4.8두 번째 사본: [copy.ID]4.9만날 수 있는 키 두 개 더4.10안에서 무슨 일이 일어났나
6.1원본6.2페이지 세트 고르기: ui6.3약관: license6.4설치 폴더6.5위쪽의 그림: banner6.6내 말로: [ui-text.ID]6.7끝에 프로그램 시작하기: launch6.8로그 저장하기: save-log6.9해 보기6.10안에서 무슨 일이 일어났나
7.1원본7.2언어 더하기: languages7.3언어마다 약관: license-xx7.4언어마다 글: text-xx7.5영어와 한국어 말고 다른 언어7.6글꼴7.7번역되지 않는 것7.8해 보기7.9안에서 무슨 일이 일어났나
8.1기능8.2원본8.3기능 선언하기: [feature.ID]8.4파일을 기능에 넣기: feature8.5사용자가 보는 것8.6명령줄에서 고르기8.7나중에 바꾸기8.8안에서 무슨 일이 일어났나
9.1속성9.2원본9.3내 속성: [property.NAME]9.4이럴 때만 설치하기: when9.5설치 거부하기: [require.ID]9.6먼저 둘러보기: [search.ID]9.7설치 폴더 기억하기9.8안에서 무슨 일이 일어났나
11.12분 만에 보는 레지스트리11.2원본11.3레지스트리 값: [registry.ID]11.4환경 변수: [env.ID]11.5INI 파일: [ini.ID]11.6파일 형식: [assoc.ID]11.7링크: [protocol.ID]11.8우클릭 메뉴: [menu.ID]11.9COM 클래스: [com.ID]11.10해 보기11.11안에서 무슨 일이 일어났나
12.1원본12.2서비스: [service.ID]12.3글꼴: [font.ID]12.4접근 권한: [permission.ID]12.5아직 실행 중인 프로그램: 사전 점검12.6다시 시작하기: reboot12.7해 보기12.8안에서 무슨 일이 일어났나
14.1원본14.2페이지: [dialog.ID]14.3페이지 위의 자리14.4컨트롤: [dialog-control.ID]14.5모든 값에는 기본값이 있어야 한다: [property.NAME]14.6해 보기14.7안에서 무슨 일이 일어났나
15.1폴더15.2원본15.3캐비닛과 압축15.4여러 아키텍처: --arch15.5매번 같은 바이트: --reproducible15.6Mac 에서 온 이름: --nfc15.7명령줄의 변수: -D15.8남이 만든 조각: [merge.ID]15.9안에서 무슨 일이 일어났나
16.1서명이란16.2키 파일로 서명하기16.3타임스탬프: 인증서보다 오래 사는 서명16.4Windows 인증서 저장소의 키16.5하드웨어 토큰: PKCS#1116.6서명 확인하기: verify16.7외부 캐비닛은 서명되지 않는다16.8안에서 무슨 일이 일어났나
17.1MSI 인가 MSIX 인가?17.2폴더17.3원본17.4패키지의 정체: [msix]17.5애플리케이션: [msix-app.ID]여러 언어의 이름, 여러 크기의 로고17.6덤: [msix-extension.ID]17.7패키지가 요구하는 것: 능력과 의존 패키지17.8선택적 패키지와 수정 패키지17.9다른 표들은 무엇이 되나17.10시험용 빌드: --unsigned-test17.11서명하기17.12모든 아키텍처를 파일 하나에: 번들17.13웹 사이트에서 업데이트: .appinstaller17.14압축17.15안에서 무슨 일이 일어났나
18.1원본 검사: lint18.2패키지 검사: lint <파일>18.3표 보기: inspect18.4파일과 스트림18.5설치하지 않고 풀기: extract18.6한 곳만을 위한 변경: transform18.7서명: verify18.8MSIX 패키지18.9더 빠른 시험 빌드: --compress none18.10GUID: guid18.11오류의 뜻: explain18.12스크립트용: --json18.13명령줄의 도움말
19.1답으로 원본 만들기: new19.2이미 있는 패키지에서: new --from19.3원본 고치기: edit19.4릴리스 스크립트19.5빌드 서버에서19.6편집기에서: schema19.7AI 도우미와 함께19.8설치 프로그램 하나에 여러 패키지: [chain]19.9여기서 어디로
제2부 - 참조
20.1시작하기첫 패키지약관 페이지와 선택 구성요소나머지를 설명하는 곳20.2예20.3원본 형식20.4TOML 부분집합20.5표MSIX 패키지설치한 프로그램으로 등록하기: [action.ID]레지스트리 값: [registry.ID]바로가기: [shortcut.ID]파일 형식과 링크: [assoc.ID], [protocol.ID]탐색기의 우클릭 메뉴: [menu.ID]COM 클래스: [com.ID]탐색기 처리기: [handler.ID]MSIX 전용: [msix-extension.ID]지우기와 복사: [remove.ID], [copy.ID]환경 변수: [env.ID]INI 파일: [ini.ID]설치 프로그램 하나에 여러 패키지: [chain]병합 모듈: [merge.ID]병합 모듈 만들기: [module]검색과 요구: [search.ID], [require.ID]서비스, 글꼴, 권한사용자별 패키지와 겸용 패키지: scope캐비닛설치된 앱 항목과 속성명령줄로 설치하기창 없이 설치하기대화창: ui여러 언어아이콘, 완료 페이지, 설치 범위 페이지나만의 대화창 페이지: [dialog.ID], [dialog-control.ID]아키텍처와 업그레이드 계열먼저 지워야 하는 판진행하기 전에: 사전 점검나중에 정리하기: 정리 작업제품과 함께 지워지는 추가 기능: parent, remove-addons다른 제품을 대신하기: replaces와일드카드: [files.ID]빈 폴더: [folder.ID]기능(feature)조건: when제거할 때 파일 남기기: keep변수Windows 이름프로그램 파일설치 폴더 지키기경로20.6명령줄20.7진단 코드
제3부 - 기초 지식
23.1문자와 코드 포인트23.2ASCII23.3코드 페이지: 한 바이트, 256 문자23.4UTF-823.5UTF-1623.6바이트 순서 표시23.7유니코드 정규화23.8글자가 이상하게 보일 때23.9쓰이는 곳
25.1데이터를 줄일 수 있는 까닭25.2LZ77: "앞에서 베껴 와라"25.3허프만 부호: 흔한 기호에 짧은 부호25.4deflate, 비트 하나하나25.5MSZIP: 캐비닛 속의 deflate25.6MSIX 속의 deflate25.7쓰이는 곳
26.1디스크가 파일을 저장하는 방법26.2MSI 는 파일 속의 파일 시스템이다작은 스트림: 미니 스트림이름26.3MSIX 는 묶음 파일이다26.4왜 두 설계인가?26.5쓰이는 곳
27.1표, 행, 열27.2기본 키: 행을 하나로 만드는 것27.3외래 키: 행을 가리키는 행27.4내가 주는 키, rubrapack 이 만드는 키27.5문자열은 한 번만: 문자열 풀27.6표에 대한 표27.7IDT 텍스트 형식27.8쓰이는 곳
28.1열쇠 하나 대신 둘28.2서명하기와 확인하기28.3인증서: 이것은 누구의 키인가?이름: CN, O, C28.4사슬과 신뢰폐지28.5타임스탬프28.6키가 사는 곳: 파일과 토큰지문28.7쓰이는 곳
29.1환경 변수란29.2흔히 쓰는 변수폴더폴더가 아닌 것29.3변수가 없는 폴더29.4세 시점29.5Windows Installer 의 이름29.6rubrapack 에서29.7쓰이는 곳
제4부 - 파일 형식
31.1섹터31.2머리(처음 512바이트) [spec]31.3FAT, DIFAT, 미니 FAT [spec]31.4디렉터리 [spec]31.5단순하고 결정적인 작성기31.6안전하게 읽기31.7실제 예: 튜토리얼의 hello.msi
32.1스트림스트림 이름32.2문자열 풀: _StringPool 과 _StringData코드 페이지32.3시스템 표열 형식 비트(_Columns.Type)32.4표 스트림32.5변환(.mst)32.6패치(.msp)32.7IDT 보관 파일(MsiDatabaseExport 가 쓰는 것)32.8안전하게 읽기32.9실제 예: 튜토리얼의 hello.msi
33.1배치 [spec] [observed]33.2설치 패키지가 정하는 속성33.3코드 페이지 함정 - 요약 문자열은 ASCII 로 [observed]33.4실제 예: 튜토리얼의 hello.msi
34.1표와 열34.2Property34.3Directory34.4구성 요소, 기능, 파일34.5빈 폴더34.6Media 와 캐비닛34.7메이저 업그레이드와 다운그레이드 거부34.8설치한 프로그램으로 등록·해제하기34.9레지스트리 값34.10바로가기34.11파일 지우기와 복제34.12환경 변수34.13INI 파일34.14검색과 설치 조건34.15서비스, 글꼴, 권한34.16캐비닛, 관리 이미지, 광고34.17사용자별 패키지와 겸용 패키지34.18사용 중인 파일34.19순서34.20대화창34.21이 조리법이 아직 다루지 않는 것
36.1캐비닛 배치 [spec: MS-CAB]블록 체크섬 [spec]36.2MSZIP [spec: MS-MCI]36.3LZX [spec: MS-PATCH 2, MS-CAB]36.4deflate 인코더 간단히 [spec: RFC 1951]36.5실제 예: 튜토리얼의 hello.msi
38.1PE 파일에서 서명이 사는 곳38.2PE 다이제스트38.3CMS SignedData38.4MSI 패키지38.5타임스탬프38.6ECDSA38.7Windows 가 알려 주는 것38.8실제 예: 튜토리얼의 hello.msi