Files
networkSetup/docs/changes/2026-11-09-exe-installer-screens.md
T
jychoi4andClaude Opus 5.5 366c8fe173 feat: add EXE projects with versioned install configuration
- EXE project kind next to MSIX: formats.exe, new EXE projects, EXE app
  info (architecture, UpgradeCode), per-kind workspace; EXE builds and
  signing are still refused explicitly (#9).
- Install configuration tabs: registry grid, shortcuts and installer
  properties with formatted-text checks (#10).
- Per-version .isver files: version list, add dialog, lock/unlock,
  delete with .isver.bak backups, description (#11).
- Major/patch versions with cumulative patch checks and automatic kind
  selection (#12).
- 설치화면 tab: setup steps, theme and scripts per version (#13).
- Preferences: theme and display language (#14).
- 설치파일 tab as an Explorer-style tree: per-row add/remove, Windows
  folder install locations (FileRule.targetRoot), picked files placed
  with FileRule.sourceFolder, unsaved-rule file preview (#17).

Checks: cargo fmt/clippy/test, 82 frontend tests, Vite build and the
msix-studio build pass. npm ci, GUI click tests and real EXE builds were
not run.

Refs #9 #10 #11 #12 #13 #14 #17

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 11:10:00 +09:00

4.0 KiB

EXE 설치화면 편집

2026-11-09. 설치 구성에 설치화면 탭을 추가해 버전마다 설치 단계(추가·삭제·순서·숨김), 화면 문구와 모양, 설치 중 실행할 스크립트를 편집한다. 이번 변경은 모델·화면·입력 검사까지이며 installer-ui.json·MSI 사용자 지정 동작 생성, BA 화면 표시, 스크립트 실제 실행과 설치 시험은 범위 밖이다. 규칙은 14 EXE 설치 UI를 따른다.

결정

  • 단계 추가: 기본 카탈로그 화면 외에 약관(한 번), 안내 화면, 입력 화면(입력값은 사용자 속성에 저장)을 추가한다. 사용자 HTML 화면은 허용하지 않는다.
  • 스크립트: 소스 폴더의 PowerShell(.ps1)·CMD(.cmd/.bat)·EXE 파일을 인수 배열로 실행한다. 시점은 설치 파일 복사 전·후, 제거 파일 삭제 전(관리자), 완료 후(사용자).
  • 저장 위치: 버전 메타파일. 버전을 추가하면 복사하고 잠긴 버전은 바꾸지 않는다.

모델과 실행

  • ExeVersion.installerUi(theme, pages, scripts)를 추가했다. 없는 기존 버전 파일은 표준 마법사(InstallerUi::default)로 연다. schemas/exe-version.schema.json을 다시 생성했다.
  • package_domain::validate_installer_ui가 화면 종류·순서·숨김·필수 화면, 약관·로고 경로, 입력 항목, 스크립트 종류·시점·확장자·실패 처리·제한 시간, 제목·설명·인수의 속성 참조를 검사하고 validate_version에서 호출한다. package_infra::files::resolve_version이 스크립트 파일(MissingScriptFile)과 약관·로고 파일(MissingAsset)의 존재를 확인한다. 소스 폴더 확인은 source_root로 묶어 파일 규칙과 함께 쓴다.
  • 새 오류 코드: InvalidPageId, UnsupportedPage, DuplicatePage, InvalidPageOrder, PageCannotBeHidden, MissingPageTitle, MissingPage, MissingLicenseFile, UnexpectedPageOption, MissingInputFields, DuplicateInputProperty, MissingLabel, UnsupportedControl, InvalidChoice, InvalidColorScheme, InvalidAccentColor, InvalidAssetPath, InvalidScriptId, MissingScriptName, UnsupportedScriptStage, UnsupportedScriptKind, InvalidScriptPath, ScriptKindMismatch, UnsupportedFailureAction, ScriptFailureAfterFinish, InvalidScriptTimeout, MissingScriptFile, MissingAsset; 화면 동작 오류 PageCannotBeRemoved, MissingInputPage.
  • 화면: installer-ui-editor.ts(단계 목록, 선택 화면 편집, 모양, 스크립트 그리드). 첫 버전은 프런트엔드의 defaultInstallerUi(Rust 기본값과 같은 내용)로 만든다.

확인 결과

  • 실행: cargo fmt --check, cargo clippy -D warnings, cargo test --workspace(65개 통과, SDK 통합 1개 무시), 프런트엔드 tsc --noEmit, npm test(68개 통과), npm run build.
  • 새로 검사한 항목: 표준 마법사 유효성, 화면·스크립트 추가 후 유효성, 화면 순서·숨김·중복·누락·알 수 없는 종류, 약관·입력 항목·화면 옵션 오류, 스크립트 확장자·소스·경로·실패 처리·제한 시간·속성 참조, 스크립트·로고 파일 존재와 저장 왕복, 단계 추가·이동·삭제 규칙, 입력 항목·스크립트 추가·삭제, 편집 값 변환, 편집 화면 표시·잠금·이스케이프.
  • 실행하지 않음: GUI 클릭 시험(guiClickTest: notRun), msix-studio 데스크톱 빌드, installer-ui.json·MSI 사용자 지정 동작 생성, BA 화면 표시, 스크립트 실행, Windows VM 설치·제거·패치 시험.

근거