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