82 lines
2.9 KiB
PowerShell
82 lines
2.9 KiB
PowerShell
# 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."
|