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