From abbdc9873cc6cf5d476806a214272019783ecdfd Mon Sep 17 00:00:00 2001 From: cproudlock Date: Tue, 25 Aug 2026 13:10:29 -0400 Subject: [PATCH] Heal eMxInfo.txt on marker bays too The eMxInfo entry on the share is scoped to collections and nocollections, so a marker bay never heals. Marker bays run eDNC as well - 01-eDNC.ps1 installs it before the Mark MSI - so the same vendor installer clobbers the same file there, with nothing to restore it. The fix is a scoping change rather than a new mechanism: add the marker PCType to the existing entry. The paths it already writes are the right ones, because mxTransactionDll.dll in the Mark overlay reads \Dnc\Server Files\eMxInfo.txt - the Mark suite uses the DNC install, not its own directory. The cmd variant additionally refreshes the copy that imaging drops into the Mark directory. Nothing reads that path, so it is cosmetic; it is there so a healed bay and a freshly imaged one are identical, rather than differing in a way that costs somebody an afternoon later. --- .../Install-eMxInfo-PartMarker.cmd.template | 42 +++++++++++++++++++ .../manifest-entry-emxinfo-partmarker.json | 12 ++++++ 2 files changed, 54 insertions(+) create mode 100644 playbook/shopfloor-setup/gea-shopfloor-partmarker/Install-eMxInfo-PartMarker.cmd.template create mode 100644 playbook/shopfloor-setup/gea-shopfloor-partmarker/manifest-entry-emxinfo-partmarker.json diff --git a/playbook/shopfloor-setup/gea-shopfloor-partmarker/Install-eMxInfo-PartMarker.cmd.template b/playbook/shopfloor-setup/gea-shopfloor-partmarker/Install-eMxInfo-PartMarker.cmd.template new file mode 100644 index 0000000..40ca0cc --- /dev/null +++ b/playbook/shopfloor-setup/gea-shopfloor-partmarker/Install-eMxInfo-PartMarker.cmd.template @@ -0,0 +1,42 @@ +@echo off +REM Install-eMxInfo-PartMarker.cmd - eMxInfo.txt healing for MARKER bays. +REM +REM Identical to Install-eMxInfo.cmd for the two paths that matter, plus the +REM Mark install directory. +REM +REM WHICH PATH ACTUALLY MATTERS: mxTransactionDll.dll (shipped in the Mark +REM overlay) references "\Dnc\Server Files\eMxInfo.txt", so the Mark suite +REM reads the DNC install just as eDNC does. The two DNC paths below are +REM therefore the functional ones on a marker bay too. +REM +REM WHY THE MARK PATH IS HERE AT ALL: 02-Setup-PartMarker.ps1 copies +REM eMxInfo.txt into C:\Program Files (x86)\Mark at imaging time. Nothing +REM reads it there, but leaving it stale would make a healed bay differ from a +REM freshly imaged one, and the next person to compare the two would waste an +REM afternoon on it. Copying a 1KB file is cheaper than that. +REM +REM Use this INSTEAD of Install-eMxInfo.cmd on gea-shopfloor-partmarker, or +REM simply add the marker PCType to the existing entry and accept that the Mark +REM copy goes stale - it is cosmetic either way. + +set "SRC=%~dp0eMxInfo.txt" +if not exist "%SRC%" ( + echo Install-eMxInfo-PartMarker: source file not found at %SRC% + exit /b 1 +) + +set "DST64=C:\Program Files\DNC\Server Files" +set "DST86=C:\Program Files (x86)\DNC\Server Files" +set "DSTMARK=C:\Program Files (x86)\Mark" + +if not exist "%DST64%\" mkdir "%DST64%" 2>nul +if not exist "%DST86%\" mkdir "%DST86%" 2>nul + +copy /Y "%SRC%" "%DST64%\eMxInfo.txt" >nul || exit /b 2 +copy /Y "%SRC%" "%DST86%\eMxInfo.txt" >nul || exit /b 3 + +REM The Mark directory only exists on a marker bay; not an error elsewhere. +if exist "%DSTMARK%\" copy /Y "%SRC%" "%DSTMARK%\eMxInfo.txt" >nul + +echo Install-eMxInfo-PartMarker: deployed eMxInfo.txt to the DNC paths (and Mark, if present) +exit /b 0 diff --git a/playbook/shopfloor-setup/gea-shopfloor-partmarker/manifest-entry-emxinfo-partmarker.json b/playbook/shopfloor-setup/gea-shopfloor-partmarker/manifest-entry-emxinfo-partmarker.json new file mode 100644 index 0000000..abc1d75 --- /dev/null +++ b/playbook/shopfloor-setup/gea-shopfloor-partmarker/manifest-entry-emxinfo-partmarker.json @@ -0,0 +1,12 @@ +{ + "_comment": "eMxInfo.txt healing for MARKER bays. Today the eMxInfo entry on the share is scoped to gea-shopfloor-collections and gea-shopfloor-nocollections, so a marker bay never heals - and marker bays run eDNC too (01-eDNC.ps1 installs it before the Mark MSI), so they are clobbered by exactly the same vendor installer. THE FIX IS A SCOPING CHANGE, not a new entry: add \"gea-shopfloor-partmarker\" to the PCTypes array of the EXISTING eMxInfo.txt entry in the share manifest. This file records that change and why; it is not a second entry to add alongside the first.", + + "_why_the_dnc_paths_are_the_right_target": "The Mark suite reads eMxInfo from the DNC install, not from its own directory: mxTransactionDll.dll references \\Dnc\\Server Files\\eMxInfo.txt (and eMxInfo.obs). So the two paths Install-eMxInfo.cmd already writes - C:\\Program Files\\DNC\\Server Files and C:\\Program Files (x86)\\DNC\\Server Files - are the ones that matter on a marker bay as well, and the existing cmd needs no change. 02-Setup-PartMarker.ps1 also drops a copy at C:\\Program Files (x86)\\Mark\\eMxInfo.txt at imaging time; nothing in the Mark binaries reads that path, so it is cosmetic. Install-eMxInfo-PartMarker.cmd.template refreshes it anyway, purely so a healed bay is byte-identical to a freshly imaged one and nobody has to wonder why they differ.", + + "_detection": "Unchanged: DetectionMethod Hash against the x86 DNC path, DetectionValue is the SHA256 of the current site file. Ordering still matters - the eDNC entry must be evaluated BEFORE this one, so a fresh install clobbers the file and the hash check then restores it in the same cycle. On a marker bay the Mark MSI is a second clobber risk, and the same ordering rule covers it.", + + "PCTypes_change": { + "from": ["gea-shopfloor-collections", "gea-shopfloor-nocollections"], + "to": ["gea-shopfloor-collections", "gea-shopfloor-nocollections", "gea-shopfloor-partmarker"] + } +}