# Update-Discord.ps1 # Closes Discord if open, checks for updates, launches Discord to apply them, then closes Discord once done. $DiscordDir = "$env:LocalAppData\Discord" $LogFile = Join-Path $PSScriptRoot "Update-Discord.log" function Log-Message { param([string]$Message) $Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss" $LogLine = "[$Timestamp] $Message" Write-Output $LogLine Add-Content -Path $LogFile -Value $LogLine -ErrorAction SilentlyContinue } Log-Message "Starting Discord daily update task..." # Ensure we are in the correct working directory if (Test-Path $DiscordDir) { Set-Location -Path $DiscordDir Log-Message "Working directory set to: $DiscordDir" } else { Log-Message "Error: Discord directory not found at $DiscordDir. Exiting." Exit 1 } # 1. Close Discord if open $DiscordProcesses = Get-Process -Name "Discord" -ErrorAction SilentlyContinue if ($DiscordProcesses) { Log-Message "Closing active Discord processes..." $DiscordProcesses | Stop-Process -Force Start-Sleep -Seconds 5 } else { Log-Message "Discord is not running." } # 2. Run Update.exe --update if (Test-Path "Update.exe") { Log-Message "Running Update.exe --update..." $UpdateProcess = Start-Process -FilePath "Update.exe" -ArgumentList "--update=https://discord.com/api/updates/stable?platform=win" -Wait -PassThru -NoNewWindow Log-Message "Update.exe --update completed with exit code: $($UpdateProcess.ExitCode)" } else { Log-Message "Error: Update.exe not found. Exiting." Exit 1 } # 3. Run Update.exe --processStart Discord.exe Log-Message "Running Update.exe --processStart Discord.exe..." $LaunchProcess = Start-Process -FilePath "Update.exe" -ArgumentList "--processStart Discord.exe" -PassThru -NoNewWindow Log-Message "Discord launch triggered." # 4. Wait for Discord process to start Log-Message "Waiting for Discord process to start..." $Started = $false for ($i = 1; $i -le 30; $i++) { if (Get-Process -Name "Discord" -ErrorAction SilentlyContinue) { $Started = $true Log-Message "Discord process detected after $i seconds." break } Start-Sleep -Seconds 1 } if ($Started) { # Give Discord time to complete its checking and update process (installing updates, updating files, database migration) Log-Message "Waiting 60 seconds for Discord update process to complete..." Start-Sleep -Seconds 60 # 5. Immediately close Discord once the update process is complete Log-Message "Closing Discord..." $CloseProcesses = Get-Process -Name "Discord" -ErrorAction SilentlyContinue if ($CloseProcesses) { $CloseProcesses | Stop-Process -Force Log-Message "Discord successfully closed." } else { Log-Message "Discord was already closed." } } else { Log-Message "Error: Discord process did not start within 30 seconds." } Log-Message "Discord update task completed."