- 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>
4.0 KiB
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 설치·제거·패치 시험.