- 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>
55 lines
3.4 KiB
PowerShell
55 lines
3.4 KiB
PowerShell
# Установка кассы 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."
|