From 313cc189e90429a36fd25ee56fd2f40a9ecb0272 Mon Sep 17 00:00:00 2001 From: PTah Date: Wed, 29 Apr 2026 16:13:14 +1000 Subject: [PATCH] =?UTF-8?q?v1.3.5:=20=D0=BF=D1=83=D1=82=D1=8C=20=D1=81?= =?UTF-8?q?=D0=BA=D1=80=D0=B8=D0=BF=D1=82=D0=B0=20=D0=BF=D1=80=D0=B8=20Sta?= =?UTF-8?q?rt-Process,=20=D0=B4=D0=B8=D0=B0=D0=B3=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B8=D0=BA=D0=B0=20watchdog,=20DEPLOY.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DEPLOY.md | 2 ++ Login_Monitor.ps1 | 19 ++++++++++++++++--- version.txt | 2 +- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/DEPLOY.md b/DEPLOY.md index 6c9c36e..bcd87a3 100644 --- a/DEPLOY.md +++ b/DEPLOY.md @@ -49,6 +49,8 @@ Watchdog регистрируется через **`schtasks.exe /Create /SC MIN Сразу после успешного **`/Create`** вызывается **`schtasks /Run`** для watchdog: первый прогон не ждёт следующего 5‑минутного окна расписания. +Если watchdog срабатывает, а основной монитор «не поднимается», смотрите **`Logs\watchdog.log`** (сообщение о PID и предупреждение, если процесс сразу завершился) и **конец `Logs\login_monitor.log`** — частая причина (исправлено в **1.3.5+**): пустой **`$PSCommandPath`** у процесса, запущенного через **`Start-Process`**; скрипт теперь подставляет путь через **`$PSScriptRoot`**. + Проверка: ```powershell diff --git a/Login_Monitor.ps1 b/Login_Monitor.ps1 index 3c03199..961f22b 100644 --- a/Login_Monitor.ps1 +++ b/Login_Monitor.ps1 @@ -69,7 +69,7 @@ $script:RdpInstanceMutex = $null # строки ниже, если правки «мелкие» и вы не хотите менять отображаемую версию в логах). # Рекомендация: при значимых релизах меняйте и $ScriptVersion, и version.txt одинаково; при только # исправлениях на шаре — достаточно поднять patch в version.txt (например 1.3.0.1). -$ScriptVersion = "1.3.4" +$ScriptVersion = "1.3.5" # Логи (все под InstallRoot) $LogFile = Join-Path $script:InstallRoot "Logs\login_monitor.log" @@ -192,6 +192,10 @@ function Write-Log { function Get-RdpMonitorThisScriptPath { $p = $PSCommandPath if ([string]::IsNullOrWhiteSpace($p)) { $p = $MyInvocation.MyCommand.Path } + # При запуске дочернего процесса через Start-Process иногда нет PSCommandPath — используем каталог скрипта. + if ([string]::IsNullOrWhiteSpace($p) -and -not [string]::IsNullOrWhiteSpace($PSScriptRoot)) { + $p = Join-Path $PSScriptRoot $script:CanonicalScriptName + } if ([string]::IsNullOrWhiteSpace($p)) { return $null } return [System.IO.Path]::GetFullPath($p) } @@ -409,9 +413,18 @@ function Start-RdpMonitorWatchdogMain { if (-not $mainRunning) { Write-WdLog "Монитор не найден — запуск $canonicalScript" - Start-Process -FilePath (Get-RdpMonitorPowerShellExe) -ArgumentList @( + $psExeWd = Get-RdpMonitorPowerShellExe + $started = Start-Process -FilePath $psExeWd -WorkingDirectory $script:InstallRoot -ArgumentList @( '-NoProfile', '-ExecutionPolicy', 'Bypass', '-File', $canonicalScript - ) -WindowStyle Hidden + ) -WindowStyle Hidden -PassThru + Write-WdLog "Монитор: создан процесс PID=$($started.Id)." + Start-Sleep -Seconds 5 + $still = Get-Process -Id $started.Id -ErrorAction SilentlyContinue + if (-not $still) { + Write-WdLog "ПРЕДУПРЕЖДЕНИЕ: процесс монитора PID $($started.Id) завершился за несколько секунд — см. конец $script:LogFile (ошибка до цикла мониторинга)." + } else { + Write-WdLog "Монитор: процесс PID $($started.Id) ещё работает после старта." + } } else { Write-WdLog "Монитор работает (канонический экземпляр найден)." } diff --git a/version.txt b/version.txt index d0149fe..80e78df 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.3.4 +1.3.5