2026-09-03 세션 — pcadtools 배포 도구 deploy.py (대상 PC 단일 출처)
handoff.md 에서 원문 그대로 이관한 조각(26.10.20 캡 20,000자 정리). 아래 「논의·대안」 = 원문 무변경.
논의·대안
🆕 26.9.3 — pcadtools 배포 도구 deploy.py (대상 PC 단일 출처)
앞으로 pcadtools 를 고치면 이거 한 번 돌리는 게 배포다(페페 지시 26.9.3 — poinimos02 도 대상에 포함).
PYTHONUTF8=1 python C:/dev/pcadtools-plugin/deploy.py # 현황만(아무것도 안 바꾼다)
PYTHONUTF8=1 python C:/dev/pcadtools-plugin/deploy.py push [호스트]
- 대상 =
deploy.py의HOSTS한 곳뿐 —poin-mini(로컬) ·poinimos01·poinimos02. 새 PC 는 ssh 별칭 한 줄 추가. - 하는 일 = 설치본(
C:\dev\pcadtools-plugin\pcadtools installer)과 각 PC 의%LocalAppData%\pcadtools\를 MD5 로 대조 → 다른 PC 에만 파일 전송 후install.ps1 -SkipFirewall실행 → 다시 대조해 일치 확인 → 스테이징 폴더 삭제. - 🔴AutoCAD 가 떠 있는 PC 는 강제로 덮지 않는다(NETLOAD 된 DLL 이 잠겨 있다 — 반쯤 쓰다 실패하면 멀쩡한 설치가 깨진다). ~~건너뛴다~~ → 26.9.9 부터 「캐드를 끄면 5분 안에」 스스로 설치되게 예약한다(페페 지시). 바로 아래 절 참조.
🆕 26.9.9 — 캐드 열린 PC = 캐드를 끄면 자동설치(5분 폴링 예약작업, 페페 지시)
deploy.py push 가 acad>0 인 PC 를 만나면 건너뛰지 않고 설치본을 C:\ProgramData\pcadtools-pending\ 에 놓고
예약작업 Cody\PcadTools-PendingInstall(/sc MINUTE /mo 5)을 건다 → 그 PC 가 캐드를 끄면 5분 안에 스스로 설치하고
예약작업·스테이징을 자기 손으로 지운다. 새 파일 2개 = pending_install.vbs(숨김 실행) + pending_install.ps1(본체).
현황은 deploy.py(조회 전용)가 ⏳ 자동설치 예약돼 있다 + 예약설치 로그 끝줄로 보여준다.
- 🔑「캐드가 닫히는 순간」을 잡는 트리거는 없다 — 프로세스 종료 이벤트(보안 4689)는 감사정책이 필요하고(관리자),
WMI 종료 이벤트는 상주 프로세스를 하나 더 만든다. 5분 폴링이 제일 싸고 확실하다(깨어나서
Get-Process acad한 번). ~~ONLOGON~~ 은 26.9.9 에 먼저 걸었다가 버렸다 — 며칠 로그온 없이 켜 두면 그만큼 안 깔린다(페페 지시). - ⚠폴링이라 로그가 불어난다 →
pending_install.ps1은 「캐드 아직 떠 있다」를 마지막 줄이 같은 문구가 아닐 때만 적는다 (안 그러면 하루 288줄). 실패(exit≠0)면 예약을 유지해 5분 뒤 재시도한다. - 🔴스테이징을
%TEMP%에 두지 마라 — ssh 로 붙는 계정과 캐드를 쓰는 콘솔 계정이 다를 수 있고(그러면 남의 프로필), 정리도구가 지운다.C:\ProgramData는 표준 사용자도 폴더를 만들 수 있고 누가 로그온해도 읽힌다. - 🔴계정 비교는 이름만으로 한다 —
$env:USERDOMAIN은 워크그룹PC 에서WORKGROUP을 주는데Win32_ComputerSystem.UserName은PC명\사용자다 → 같은 계정인데 늘 달라 보여 불필요하게/ru(다른 계정) 경로를 탄다(실측). - 🔴예약작업 설정을
Set-ScheduledTask로 밀지 마라 — S4U 작업에서 조용히 안 먹으면서 principal 만 Interactive 로 바꿔 놓는다 (26.9.9 poinimos02 실측:DisallowStartIfOnBatteries는 True 그대로, LogonType 만 S4U→Interactive). 배터리 플래그는 대상 3대 전부 데스크톱(PCSystemType=1·배터리 0)이라 애초에 무의미해 손대지 않는다. 노트북이HOSTS에 들어오면 그때Register-ScheduledTask로 통째 등록해라. - 🔴
install.ps1은 자식 프로세스로 부른다 — 그 안에exit가 있어 닷소스하면 부모 스크립트까지 죽는다. 성공(exit 0)일 때만 예약작업을 지운다. - 🔴정상 설치 경로도 예약을 걷어야 한다 — 캐드를 닫은 뒤
push가 그냥 설치해 버리면 예약작업만 남아 없는 스테이징을 부른다 (26.9.9 poinimos01 실측).clear_pending()이 「이미 최신」·설치성공 두 자리에서 예약작업+스테이징을 지운다. - 실측 = ① 미니PC 전 과정(설치→예약작업 자기삭제→스테이징 제거→로그
done) ② MINUTE 트리거가 정말 깬다 (/mo 1시험작업 30초 안에 발동 확인 — ssh 로 만든 작업도 예정대로 돈다) ③ poinimos02 =EVERY=PT5M. 로그 =%LocalAppData%\pcadtools\pending_install.log(설치가 스테이징을 지워도 남는 자리). - 🔴원격은 항상
-SkipFirewall— install.ps1 의 방화벽 단계는-Verb RunAs(UAC)라 SSH 세션에서 멈춘다. 차단 규칙MDCAD_NetBlock_Acad는 최초 설치 때 이미 들어가 있어 건너뛰어도 된다(3대 전부 확인). - 🔴실사용 폴더는
%LocalAppData%\pcadtools\·%LocalAppData%\MDCAD\는 옛 경로지만 로그는 계속 거기 쌓인다 (mdplot_log.txt·tread_log.txt·dwgcompare_log.txt) → 폴더째 지우지 마라. 옛 DLL 사본만MDCAD\_old\로 뺀다. - 🔴subprocess 로 ssh 를 부를 때 인자에 따옴표를 직접 붙이지 마라 —
list2cmdline이\"로 이스케이프해 원격이-File \C:\...\로 받아 PowerShell 이 대화형으로 떨어진다(배너만 찍히고 멎은 것처럼 보인다). 경로에 공백이 없게 하고 맨 인자로 넘긴다. - 🔴원격 PowerShell 콘솔 출력은 cp949 — UTF-8 로 읽으면 한글이 전부 깨진다.
utf-8strict 실패 →cp949로 갈라 읽는다.
poinimos02 실측 (26.9.3 첫 배포)
- AutoCAD 2016 English (R20.1)
C:\Program Files\Autodesk\AutoCAD 2016· WebView2 152 · .NET 4.8.1 설치돼 있다. - ✅2024 참조 빌드가 2016 에서 실제로 돈다 — 증거 =
MDCAD\mdplot_log.txt가 오늘(26.9.3) 갱신돼 있었다(도곽출력 실사용). - 옛 개별 자동로드(
AcadTread/MDCAD/DwgCompare)는 이미 없었다 — 남은 등록은PcadTools2개 제품키뿐. ⛔AcDwgCompare·AcPropertyManagement·App Manager·BIM360Glue= 오토데스크 기본 번들,MANDUcad(C:\mdcad\MD23_v2(64bit)\) = 만두캐드 서드파티 — 우리 것 아니니 건드리지 마라. - ⏳남은 육안 = 「가구패널탐지」 버튼 1회 — 새 AcadTread(자재탭·WebView2 포함)가 2016 에서 처음 도는 것이다.
결정
원문 안에 포함(이관 조각이라 별도 추가 없음).
산출물·커밋
원문 안에 포함.
다음
원문 안의 미결·후속 참조. 상태 = 종결.
관계
- 주제 그룹: acad-tread
- 관련 문서: acad-tread-handoff