- 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
설치파일의 Windows 기본 폴더 위치
2026-11-10. EXE 버전이 설치 폴더 외에 ProgramData·공용 파일·사용자 AppData 같은 Windows 기본 폴더에도 파일을 설치하도록 파일 규칙에 대상 루트를 추가했다. 설치파일 탭의 폴더 추가 팝업에서 기본 위치를 드롭다운으로 고르거나 [속성]경로로 직접 입력한다. 화면·모델·입력 검사까지이며 MSI Directory 테이블 생성과 실제 설치 시험은 범위 밖이다.
사용
- 설치파일 탭에서 폴더 추가를 누른다.
- 기본 위치에서 선택한 폴더, 설치 폴더(INSTALLDIR), Windows 기본 폴더 중 하나를 고르고 폴더 이름을 입력한다. 아래에 만들어질 Windows 경로가 미리 보인다.
- **직접 입력…**을 고르면 이름 칸 대신 경로 칸이 나온다.
[CommonAppDataFolder]Baron\Config처럼[속성]하위\경로로 적으며, 속성 없이 적거나[INSTALLDIR]로 시작하면 설치 폴더 기준이다. 여러 단계 폴더를 한 번에 만들 수 있다. - 만든 위치는 트리에 별도 루트(예:
ProgramData CommonAppDataFolder)로 나타나고, 그 아래에서 파일 추가·패턴 규칙을 쓴다.
2026-11-11 변경: 폴더 추가 팝업의 기본 위치 선택·직접 입력은 없어지고, Windows 기본 폴더는 설치파일 탭 오른쪽 위 설치 위치 추가로 트리에 더한다. 하위 폴더는 각 폴더 행의 폴더 추가 버튼으로 만든다(변경 기록).
모델과 실행
- 프로젝트:
FileRule.targetRoot(선택, 기본 빈 문자열 = 설치 폴더)를 추가했다. 비어 있으면 파일에 쓰지 않아 기존 파일과 빌드 계획 해시가 바뀌지 않는다. - 허용 루트(
TARGET_ROOTS):ProgramFiles64Folder,ProgramFilesFolder,CommonAppDataFolder,AppDataFolder,LocalAppDataFolder. 시스템·Windows 폴더, 여러 제품이 함께 쓰는 공용 파일(CommonFiles64Folder,CommonFilesFolder)과 글꼴(FontsFolder)은 넣지 않았고(2026-11-11 공용 파일·글꼴 제외), 시작 메뉴·바탕화면은 바로가기 탭에서 다룬다. x86 프로젝트는 64비트 폴더를 쓸 수 없다. MSIX는 대상 루트를 쓸 수 없다. 위반은UnsupportedTargetRoot(*.targetRoot). AppDataFolder·LocalAppDataFolder는 설치한 사용자의 폴더에만 만들어진다(다른 사용자에게는 없음). 화면 설명에 적었다.- 설치 경로 표기: 미리보기·입력 검사의 대상 경로는 설치 폴더 기준 상대 경로이고, 다른 루트는
[CommonAppDataFolder]/Baron/x.json처럼 루트를 앞에 붙인다. 같은 상대 경로가 두 루트에 있어도 충돌하지 않는다. - 패치 버전: 대상 루트를 바꾸면 설치 위치가 바뀌므로
PatchMovesFiles로 거부한다. - 폴더 이름:
[로 시작하는 이름은 루트 표기와 헷갈리므로 거부한다. - 범위 밖: MSI Directory/Component 생성, 사용자별 폴더의 다중 사용자 배포(활성 설정·자체 복구), 루트 폴더 자체의 제거 정책.
확인 결과
- Rust 테스트 72개 통과(무시 1개: SDK 통합). 대상 루트 미리보기 경로와 루트 간 비충돌, 시스템 폴더·x86의 64비트 폴더·MSIX 대상 루트 거부, 대상 루트 없는 규칙의 저장 형식 유지를
file_preview.rs에서 검사한다. - 프런트엔드 테스트 79개 통과; TypeScript/Vite 빌드와
cargo build -p msix-studio --features custom-protocol통과. 팝업 선택지(선택 폴더·설치 폴더·허용 루트·직접 입력, x86·MSIX 제한, 이스케이프), 직접 입력 해석과 오류, 트리의 루트별 표시, 파일 추가·패턴 규칙의 대상 루트 설정을 검사한다. - 실제 앱에서 팝업을 조작하는 GUI 시험과 다른 루트로의 설치 시험은 수행하지 않았다.