docs(plugin): исправить обоснование сессионного mutex без Global\

Прежний комментарий утверждал, что Global\ требует отдельной привилегии —
ревью опровергло это эмпирически (мьютекс создался без ошибок под тем же
непривилегированным пользователем). Настоящая причина: плагин ставится на
чужие незнакомые машины, где политика безопасности может отличаться, и отказ
Global\ был бы фатальным для запуска сервера, тогда как остаточный риск
сессионного mutex (лишняя повторная загрузка при параллельных сессиях)
ограничен и не портит установку.
This commit is contained in:
2026-07-31 02:14:15 +03:00
parent f1f2d05c96
commit c65a890df9
+9 -3
View File
@@ -123,9 +123,15 @@ function Resolve-KompasMcpExecutable {
$InstallRoot = Join-Path $env:LOCALAPPDATA 'kompas-mcp'
}
# Именованный mutex без префикса "Global\": это однопользовательская
# десктопная машина, не терминальный сервер — сессионного мьютекса достаточно,
# а "Global\" на некоторых конфигурациях требует отдельной привилегии.
# Именованный mutex без префикса "Global\": сессионного мьютекса достаточно,
# чтобы синхронизировать процессы одной сессии Windows. "Global\" не берём
# осознанно: плагин ставится на чужие незнакомые машины, где политика
# безопасности может запретить создание глобальных объектов — тогда отказ
# WaitOne/New-Object был бы фатальным и сломал бы запуск сервера. Цена отказа
# от "Global\" невелика: при одновременном старте из разных сессий (RDP +
# консоль) возможна лишняя повторная загрузка, но не порча установки — от неё
# защищают проверка целевого каталога, сверка SHA256 и обработка IOException
# при переносе каталога.
$mutex = New-Object System.Threading.Mutex($false, "kompas-mcp-install-$($Lock.version)")
[void]$mutex.WaitOne()
try {