Posted November 14, 2024Nov 14 Hello all, We have agents running over multiple rds environments. Pulseway has patched Net.Framework After this patch Pulseway dashboard is showing those systems as offline but they are up. What ive tried: Executing the PCMonitor.exe is not showing or doing anything Reboot rds servers Restarting service PCMonitorsrv.exe in services, is giving me this error: 'Windows could not start the Pulseway service on Local Computer / Error 1053: The service did not respond to the start or control request in a timely fashion. Weird thing is, Pulseway dashboard is working on those systems, but the agent is not working. Please help me out! Regards, Leroy
November 14, 2024Nov 14 Administrators Hey @Leroy - Thanks for flagging this. I've raised a ticket to support on your behalf, so someone from our team will be contacting you shortly😊
November 14, 2024Nov 14 Administrators Hey @Leroy, Do you have an Application Crash event in the Application Windows Event Log? -Paul
November 15, 2024Nov 15 Author Hi Paul, & Mariale Thanks for the fast reply, See attachment for the windows log: After this i checked if the service was running, service wasnt running, when enabling the pulseway agent service i get this error: Regards, -Leroy
November 17, 2024Nov 17 The Pulseway service on workstations will not start and appears to be marked for deletion. I was also unable to reinstall Pulseway agent and unable to uninstall the current Pulseway agent. Any way to manually fix this?
November 18, 2024Nov 18 Administrators Hey @KerryC - Thank you for reaching out. I raised a ticket on your behalf and someone from our team will contact you shortly😊
November 19, 2024Nov 19 Administrators @KerryC for the crashes, did you see any "Application Error" error too? Can you please send us a screenshot of that event too? If the service is marked for deletion it should be removed upon a reboot. Once it's removed, you can use installutil from the C:\Windows\Microsoft.NET\Framework64\v4.0.30319 folder to manually register the service: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\installutil.exe "c:\program files\pulseway\pcmonitorsrv.exe" -Paul
November 21, 2024Nov 21 Hey @Paul I have been experiencing this bug too in the last week I lost access to multiple windows 11 systems. Is there any suggested fix for this issue yet as even reinstalling doesn't work to fix this issue. I have attached the event logs too.
November 22, 2024Nov 22 Administrators Hey @AidThePorter - Thanks for reaching out to us. I raised a ticket on your behalf and someone from our support team will reach out shortly☺️
December 5, 2024Dec 5 Administrators Update, we've identified the issue and we've built a correction script that must be executed as an administrator on affected machines: # Function to calculate file hash function Get-FileHashLower { param ( [string]$FilePath, [string]$Algorithm = "MD5" ) if (-not (Test-Path -Path $FilePath)) { Write-Output "Error: File not found - $FilePath" return $null } try { return (Get-FileHash -Path $FilePath -Algorithm $Algorithm).Hash.ToLower() } catch { Write-Output "Error: Unable to calculate hash for $FilePath. $_" return $null } } Write-Output "Environment Variables:" Get-ChildItem Env: | Sort-Object Name # Enable TLS 1.2 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 # Step 0: Locate "PC Monitor" service binary folder $ServiceName = "PC Monitor" $Service = Get-Service -Name $ServiceName -ErrorAction SilentlyContinue if (-not $Service) { Write-Output "Error: '$ServiceName' service not found." exit 1 } $BinaryPath = (Get-WmiObject Win32_Service | Where-Object { $_.Name -eq $ServiceName }).PathName.Trim('"') if (-not $BinaryPath) { Write-Output "Error: Unable to find binary path for '$ServiceName'." exit 1 } $BinaryFolder = Split-Path -Path $BinaryPath -Parent Write-Output "Binary folder located: $BinaryFolder" # Step 1: Download and verify update.zip $UpdateUrl = "https://updates.pulseway.com/update.zip" $DownloadedFile = "$env:Temp\update.zip" try { $WebClient = New-Object System.Net.WebClient $WebClient.DownloadFile($UpdateUrl, $DownloadedFile) Write-Output "File downloaded successfully to $DownloadedFile" } catch { Write-Output "Error: Failed to download the update file. $_" exit 1 } $ExpectedMD5 = "9235318c553c3f770ba95ab673566a4e" $DownloadedMD5 = Get-FileHashLower -FilePath $DownloadedFile if ($DownloadedMD5 -ne $ExpectedMD5) { Write-Output "Error: MD5 hash of the downloaded file does not match. Expected: $ExpectedMD5, Found: $DownloadedMD5" exit 1 } # Step 2: Extract the archive $ExtractedFolder = "$env:Temp\update_extracted" Write-Output "Extracted Path: $TargetPath" if (Test-Path $ExtractedFolder) { Remove-Item -Recurse -Force $ExtractedFolder } New-Item -ItemType Directory -Path $ExtractedFolder | Out-Null Add-Type -AssemblyName System.IO.Compression.FileSystem [System.IO.Compression.ZipFile]::ExtractToDirectory($DownloadedFile, $ExtractedFolder) Write-Output "Extracted Files: ----" Get-ChildItem -Path $ExtractedFolder -Recurse | ForEach-Object { Write-Output $_.FullName } Write-Output "Extracted Files: ++++" # Step 3: Compare hashes of files $DiscrepantFiles = @() foreach ($File in Get-ChildItem -Recurse -Path $ExtractedFolder) { # Normalize and resolve paths $ResolvedExtractedFolder = (Get-Item $ExtractedFolder).FullName $ResolvedFilePath = (Get-Item $File.FullName).FullName # Calculate relative path $RelativePath = $ResolvedFilePath.Substring($ResolvedExtractedFolder.Length).TrimStart('\') Write-Output "Resolved Extracted Folder: $ResolvedExtractedFolder" Write-Output "Resolved File Path: $ResolvedFilePath" Write-Output "Calculated Relative Path: $RelativePath" # Calculate target path $TargetPath = Join-Path -Path $BinaryFolder -ChildPath $RelativePath Write-Output "Calculated Target Path: $TargetPath" if ($File.PSIsContainer) { # Create folder if it does not exist if (-not (Test-Path $TargetPath)) { Write-Output "Creating folder in target path: $RelativePath" New-Item -ItemType Directory -Path $TargetPath -Force | Out-Null } } else { # Compare files if (-not (Test-Path $TargetPath)) { Write-Output "File not found in target folder: $RelativePath" $DiscrepantFiles += $RelativePath } else { $SourceHash = Get-FileHashLower -FilePath $File.FullName $TargetHash = Get-FileHashLower -FilePath $TargetPath if ($SourceHash -eq $null -or $TargetHash -eq $null) { Write-Output "Skipping comparison due to hash error: $RelativePath" continue } if ($SourceHash -ne $TargetHash) { Write-Output "Hash mismatch for file: $RelativePath" $DiscrepantFiles += $RelativePath } } } } # Step 3.5: Exit if no discrepancies found if ($DiscrepantFiles.Count -eq 0) { Write-Output "No discrepancies found. Exiting." exit 0 } # Step 4: Print the list of discrepant files Write-Output "Discrepant files:" $DiscrepantFiles | ForEach-Object { Write-Output $_ } # Step 5: Stop "PC Monitor" service and related processes $ProcessesToKill = @("pcmonitormanager.exe", "pcmonitorsrv.exe", "pcmontask.exe", "pcmonusertask.exe", "cli.exe", "addonmanager.exe", "pcmupdate.exe") for ($i = 1; $i -le 5; $i++) { if ($Service.Status -eq "Running") { Stop-Service -Name $ServiceName -Force -ErrorAction SilentlyContinue } foreach ($ProcessName in $ProcessesToKill) { Get-Process -Name $ProcessName -ErrorAction SilentlyContinue | Stop-Process -Force } Start-Sleep -Seconds 1 if ((Get-Service -Name $ServiceName).Status -eq "Stopped" -and -not (Get-Process -Name $ProcessesToKill -ErrorAction SilentlyContinue)) { break } Write-Output "Retrying stop operation... ($i/5)" if ($i -eq 5) { Write-Output "Error: Failed to stop all processes after 5 attempts." exit 1 } } # Step 6: Copy discrepant files foreach ($File in $DiscrepantFiles) { $SourceFile = Join-Path $ExtractedFolder $File $TargetFile = Join-Path $BinaryFolder $File $TargetFolder = Split-Path -Path $TargetFile -Parent if (-not (Test-Path $TargetFolder)) { New-Item -ItemType Directory -Path $TargetFolder | Out-Null } for ($i = 1; $i -le 5; $i++) { Copy-Item -Path $SourceFile -Destination $TargetFile -Force -ErrorAction SilentlyContinue if (Test-Path $TargetFile) { break } Write-Output "Retrying copy operation for $File... ($i/5)" Start-Sleep -Seconds 1 } if (-not (Test-Path $TargetFile)) { Write-Output "Error: Failed to copy $File after 5 attempts." exit 1 } } # Step 7: Verify hashes again $PostVerificationFailures = @() foreach ($File in $DiscrepantFiles) { $SourceFile = Join-Path $ExtractedFolder $File $TargetFile = Join-Path $BinaryFolder $File $SourceHash = Get-FileHashLower -FilePath $SourceFile $TargetHash = Get-FileHashLower -FilePath $TargetFile if ($SourceHash -ne $TargetHash) { $PostVerificationFailures += $File } } if ($PostVerificationFailures.Count -gt 0) { Write-Output "Post-repair verification failed for the following files:" $PostVerificationFailures | ForEach-Object { Write-Output $_ } exit 1 } # Step 8: Start the "PC Monitor" service Start-Service -Name $ServiceName Write-Output "Agent repair successful." exit 0 We apologize for the inconvenience caused. -Paul
January 7Jan 7 The Update.zip has changed. Change the line: $ExpectedMD5 = "9235318c553c3f770ba95ab673566a4e" to this $ExpectedMD5 = "3930be0c42df65df80c2e5ac632126fe"
Create an account or sign in to comment