fix: apply direct runtime paths and respect taskbar

This commit is contained in:
2026-07-28 00:35:47 +09:00
parent e3b174eec7
commit 347900701b
16 changed files with 522 additions and 401 deletions

View File

@@ -76,23 +76,25 @@ allowlist만 runtime으로 구성하며, 자격증명 INI는 별도 사용자
초기화기는 다음 작업을 한 번에 수행해야 한다.
- 로컬 `Cuts`/`Res` tree와 프로젝트가 요구하는 자산 계약을 읽기 전용으로 검증하고, 임시
bundle을 거쳐 사용자 전용
`%LOCALAPPDATA%\MBN_STOCK_WEBVIEW\RuntimeBundles\<ZIP-SHA256>`에 검증된 복사본을 설치한다.
- 설치 root를 명시적 MSBuild 속성으로 전달해, 저장소 binding을 아직 바꾸지 않은 상태에서
Debug x64 전체 자산 빌드를 먼저 검증한다.
- 선택한 `Cuts``Res`의 고정 로컬 경로를
`%LOCALAPPDATA%\MBN_STOCK_WEBVIEW\Config\runtime-folders.local.json`에 저장한다.
`Cuts`는 원래 폴더를 그대로 사용하며 전체 파일 열거, ZIP 생성, 복사, 크기·해시 검사를
하지 않는다. 실제 장면이나 영상이 사용될 때 그 파일만 개별 검증하므로 사용하지 않는
파일이 없거나 `Cuts\Video`가 일부 비어 있어도 초기화가 중단되지 않는다.
- 두 폴더의 공통 부모를 명시적 MSBuild 속성으로 전달해, 저장소 binding을 아직 바꾸지 않은
상태에서 Debug x64 빌드를 먼저 검증한다. 빌드 출력에는 `Cuts` 복사본을 만들지 않는다.
- 기존 DB INI를 `%LOCALAPPDATA%\MBN_STOCK_WEBVIEW\Res\MmoneyCoder.ini`로 복사하고 현재
Windows 사용자 전용 ACL을 적용한다.
- K3D x64 등록 상태를 읽기 전용으로 점검하고 검증된 설치본의 native/Interop SHA-256을
사용자 전용 `Config\k3d-pins.local.json`의 최초 기준으로 자동 고정한다. 이 파일이 이미
있으면 같은 값을 재사용하고, 등록 DLL이 달라졌을 때 자동 갱신하지 않는다.
- Debug x64 전체 자산 빌드 후 선택 runtime
root, Cuts/Res의 경로·길이·SHA-256·전체 파일 집합, SourceOnly가 아님과 DB INI가 빌드
출력에 들어가지 않았음을 검증한다.
- Debug x64 빌드 후 선택 runtime root가 직접 적용되었는지, SourceOnly가 아닌지,
`Cuts` 복사본과 DB INI가 빌드 출력에 들어가지 않았는지 검증한다. `Res`는 UI에 필요한
폐쇄형 allowlist만 빌드 출력에 배치한다.
- `127.0.0.1:30001` 개발 기본 endpoint의 보호된 로컬 Development Live 설정을 모든 선행
검증 뒤 새로 발급한다.
- 저장소에서 제외되는 `Directory.Build.local.props`를 마지막 성공 표식으로 원자 기록해
그 설치 root`LegacyRuntimeAssetsMode=Required`로 사용하게 한다.
선택한 두 폴더의 공통 부모`LegacyRuntimeAssetsMode=Required`로 사용하게 한다.
초기화 과정 자체는 Tornado2/PGM에 `CONNECT`하거나 PREPARE, TAKE IN, NEXT, TAKE OUT 등의
명령을 보내지 않는다. 초기화 도중 오류가 나면 F5로 송출을 시도하지 말고 원인부터 바로잡는다.

View File

@@ -28,13 +28,15 @@
`MmoneyCoder.ini`, `종목.ini`, `업종_코스피.ini`, `업종_코스닥.ini`, `해외.ini`,
`환율.ini`, `지수.ini`, `종목비교.ini` 등 활성 INI 8개를 모두 확인한다. 개별 INI나
Tornado2 endpoint를 입력하지 않으며 endpoint는 지정 개발 환경 기본값
`127.0.0.1:30001`로 고정된다. 설정을 완료한 뒤 창을 닫고 F5를 한 번 더 누른다. 두 번째
F5부터 위 세 조건을 검증해 Development Live를 적용한다. 자세한 절차는
`127.0.0.1:30001`로 고정된다. 선택한 경로는 사용자 설정에 직접 저장하며 `Cuts` 전체를
열거·복사·압축·해시 검사하지 않는다. 필요한 장면과 영상 파일은 실제 사용 시에만 개별
확인하므로 일부 파일이 없어도 설정은 완료된다. 설정을 완료한 뒤 창을 닫고 F5를 한 번 더
누른다. 두 번째 F5부터 위 세 조건을 검증해 Development Live를 적용한다. 자세한 절차는
[개발 PGM 인수 절차](DEVELOPMENT_LIVE_HANDOFF.md#2-기존-자산-보유-pc-clone-후-1회-초기화)를
따른다.
`MmoneyCoder.ini`의 DB 자격증명은 테스트 개발 서버용이라도 Git에 넣지 않는다. 첫 실행
설정은 사용자 전용 LocalAppData overlay로만 복사하며 빌드 출력, runtime bundle과 MSIX에는
설정은 사용자 전용 LocalAppData overlay로만 복사하며 빌드 출력, 선택 경로 설정과 MSIX에는
포함하지 않는다. 첫 실행 화면이 열리지 않거나 기존 로컬 설정을 명시적으로 교체해야 할 때만
`Initialize-ExistingDevelopmentPc.ps1`을 수동 fallback으로 사용한다.

View File

@@ -12,12 +12,12 @@ C:\Users\MD\source\repos\MBN_STOCK_N\MBN_STOCK_N\bin\Debug
Visual Studio가 시작하는 프로젝트는
`src\MBN_STOCK_WEBVIEW.LegacyParityApp\MBN_STOCK_WEBVIEW.LegacyParityApp.csproj`다.
이 프로젝트는 원본 경로가 존재하는 전체 빌드에서 파일을 저장소 안으로 복제하지 않고 외부
Content로 연결해 실행 파일 옆의 다음 구조를 만든다.
이 프로젝트는 원본 경로가 존재하는 전체 빌드에서`Cuts`를 저장소나 빌드 출력으로 복제하지
않고 선택한 원래 폴더를 직접 사용한다. 실행 파일 옆에는 UI용 `Res` allowlist와 Web 자산만
배치한다.
```text
MBN_STOCK_WEBVIEW.LegacyParityApp.exe
Cuts\...
Res\...
Web\...
```
@@ -26,9 +26,9 @@ Web\...
기본 `LegacyRuntimeAssetsMode``Auto`다.
- 초기화기가 모든 설정과 명시 경로 전체 빌드를 검증한 뒤 마지막 성공 표식으로 만든 Git 제외
`Directory.Build.local.props`가 있으면, 그 검증된 LocalAppData runtime으로 모든 필수
자산을 확인하고 전체 자산 빌드를 만든다.
- 초기화기가 선택한 두 경로와 빌드를 검증한 뒤 마지막 성공 표식으로 만든 Git 제외
`Directory.Build.local.props`가 있으면, 그 공통 부모 아래의 원래 `Cuts``Res` 경로를
직접 사용한다.
- 새 Git clone의 Debug/F5는 주변의 과거 원본 경로를 자동 선택하지 않고 소스 전용 첫 실행
설정 앱을 만든다.
- 원본 경로를 명시하거나 Release MSIX를 만들면 기본값이 `Required`로 바뀌어 누락 자산을
@@ -60,7 +60,8 @@ src\MBN_STOCK_WEBVIEW.LegacyParityApp\obj\SourceOnly\...
/p:LegacyRuntimeSourceRoot="D:\path\to\MBN_STOCK_N\MBN_STOCK_N\bin\Debug"
```
필수 폴더와 `Cuts\5001.t2s`, 주요 UI INI가 없으면 전체 자산 빌드는 원인을 표시하고 중단한다.
`Cuts``Res` 폴더 또는 주요 UI INI가 없으면 전체 빌드는 원인을 표시하고 중단한다.
특정 장면·영상 파일은 빌드나 첫 실행에서 전부 요구하지 않고 실제 사용 시에만 개별 확인한다.
경로 탐색이나 CI에서 소스 전용 동작을 명시적으로 확인할 때만 다음 조합을 사용할 수 있다.
이는 전체 기능 또는 배포 승인용 빌드가 아니다.
@@ -72,25 +73,24 @@ Git에는 `Cuts`, DB 자격증명, 벤더 DLL, 라이선스, 인증서 또는
## Cuts
`Cuts`179개 파일과 하위 구조 출력·게시·MSIX에 그대로 배치한다. 환경 변수, 사용자 설정
메뉴의 디자인 폴더, playout 로컬 JSON의 `sceneDirectory`가 모두 비어 있고 실행 파일 옆
`Cuts`가 있으면 그 경로를 자동으로 사용한다. 장면 루트의 우선순위는 환경 변수, 사용자 설정,
playout 로컬 JSON, 실행 파일 옆 기본 폴더 순이다.
`Cuts`전체 파일과 하위 구조 출력·게시·MSIX에 복사하지 않는다. 첫 실행 또는 사용자 설정
메뉴에서 선택한 고정 로컬 경로를 `sceneDirectory`로 저장하고, 앱은 그 원래 폴더에서 필요한
장면과 영상만 읽는다. 전체 파일 열거, ZIP 생성, 크기·해시 검사는 하지 않는다.
현재 원본의 `Cuts\Video`는 비어 있다. 따라서 다음 외부 영상은 이 복사만으로 생기지 않는다.
따라서 아래처럼 일부 외부 영상이 없어도 경로 설정과 앱 시작은 정상 완료된다.
- `s5006``Video\큐브배경.vrv`
- `s6001`의 국가별 `Video\20201008_<국가>.vrv` 13개
- 원본 코드가 참조하는 일부 기본/스튜디오 `.vrv` 배경
이 파일은 임의 대체물을 만들지 않고 원 제작 자산을 확보할 때까지 해당 장면의 자산 검사에서
명시적으로 누락 처리한다.
해당 장면을 실제로 선택하거나 송출할 때에만 필요한 파일을 안전하게 확인하며, 없으면 그
동작에서 정확한 누락 원인을 표시한다. 다른 장면이나 설정까지 막지는 않는다.
## 사용자 설정 메뉴
좌측 메뉴 하단의 `설정`에서는 네이티브 폴더 선택 창으로 디자인(`Cuts`) 폴더, 설정(`Res`)
폴더와 선택 사항인 운영 배경 폴더를 직접 지정할 수 있다. 선택한 고정 로컬 폴더는 필수 파일,
카탈로그 형식과 reparse 여부를 검증한 뒤 다음 앱 전용 파일에 저장한다.
폴더와 선택 사항인 운영 배경 폴더를 직접 지정할 수 있다. 선택한 고정 로컬 경로와 `Res`
카탈로그 형식을 확인한 뒤 다음 앱 전용 파일에 저장한다. `Cuts` 내용 전체는 검사하지 않는다.
```text
%LOCALAPPDATA%\MBN_STOCK_WEBVIEW\Config\runtime-folders.local.json