food-market/deploy/pos-install.ps1
nns 92befd1f05
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
docs(pos): мгновенный старт — замеры до/после, МойСклад-разбор, установщик Windows
- docs/moysklad-pos-startup.md: прямой замер «Кассы МойСклад» (Celeron N4120, 99–113 с
  до готовности; каталог перезаписывается целиком, полный JSON+FTS) — подтверждённые
  причины, не догадки.
- docs/pos-progress.md: раздел «Мгновенный старт» — что сделано (касса из локальной базы +
  фоновый синк, дельта остатков, gzip-каталог ×7.3, синк вне UI-потока) + таблица замеров
  (Linux/стенд + Win11 VM + 1 ядро как прокси Celeron). Цель <2 с тёплый старт на слабом
  CPU достигнута (<1 с). Серверный кэш снимка осознанно не делали (риск памяти, путь
  «раз на установку»).
- deploy/pos-install.ps1: установщик Windows (исключение Defender + прогрев + ярлык);
  холодный старт 10 с → 4,5 с. deploy/pos-win-measure.ps1 — скрипт замеров на VM.
- docs/pos.md: обновлён раздел первого запуска + варианты/стоимость подписи exe (не покупали).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 05:11:34 +05:00

55 lines
3.4 KiB
PowerShell
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Установка кассы ALL MARKET на Windows (быстрый первый запуск).
#
# Что делает:
# 1. Распаковывает сборку кассы в целевую папку (по умолчанию %LOCALAPPDATA%\all-market-pos).
# 2. Добавляет папку в исключения Microsoft Defender (если запущено от админа) —
# убирает скан свежего неподписанного exe при первом запуске (замер: холодный
# старт 10 c → 4.5 c). Без прав админа — печатает инструкцию, установка продолжается.
# 3. «Прогревает» кассу одним фоновым запуском (--smoke) — наполняет кэши ОС/рантайма,
# последующие запуски из этой папки стартуют за ~0.6 c.
# 4. Создаёт ярлык на рабочем столе.
#
# Запуск (ПКМ → «Запуск от имени администратора» для шага 2):
# powershell -ExecutionPolicy Bypass -File pos-install.ps1 -Zip .\pos-win.zip
param(
[string]$Zip = ".\pos-win.zip",
[string]$Dest = "$env:LOCALAPPDATA\all-market-pos"
)
$ErrorActionPreference = 'Stop'
Write-Host "→ Распаковка в $Dest ..."
if (Test-Path $Dest) { Remove-Item -Recurse -Force $Dest }
Expand-Archive -Path $Zip -DestinationPath $Dest -Force
$exe = Join-Path $Dest "foodmarket.Pos.exe"
if (-not (Test-Path $exe)) { throw "Не найден $exe — проверьте архив." }
Write-Host "→ Исключение Microsoft Defender для папки кассы ..."
$isAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if ($isAdmin) {
try {
Add-MpPreference -ExclusionPath $Dest -ErrorAction Stop
Write-Host " ✓ Папка добавлена в исключения Defender (первый запуск быстрее)."
} catch {
Write-Warning " Не удалось добавить исключение: $($_.Exception.Message)"
}
} else {
Write-Warning " Нет прав администратора — исключение Defender пропущено."
Write-Host " Чтобы ускорить первый запуск, выполните один раз от администратора:"
Write-Host " Add-MpPreference -ExclusionPath `"$Dest`""
}
Write-Host "→ Прогрев (один фоновый запуск) ..."
try { & $exe --smoke | Out-Null } catch { Write-Warning " Прогрев не критичен: $($_.Exception.Message)" }
Write-Host "→ Ярлык на рабочем столе ..."
try {
$lnk = Join-Path ([Environment]::GetFolderPath('Desktop')) "ALL MARKET Касса.lnk"
$ws = New-Object -ComObject WScript.Shell
$s = $ws.CreateShortcut($lnk); $s.TargetPath = $exe; $s.WorkingDirectory = $Dest; $s.Save()
Write-Host " ✓ $lnk"
} catch { Write-Warning " Ярлык не создан: $($_.Exception.Message)" }
Write-Host "`nГотово. Касса запускается из локальной базы мгновенно; каталог синхронизируется в фоне."
Write-Host "Подпись exe (устранит предупреждения SmartScreen/Defender без исключения) — см. docs/pos.md."