mirror of
https://github.com/oven-sh/bun
synced 2026-02-16 05:42:43 +00:00
windows: changes to install/upgrade/uninstallation process (#9025)
This commit is contained in:
112
src/cli/uninstall.ps1
Normal file
112
src/cli/uninstall.ps1
Normal file
@@ -0,0 +1,112 @@
|
||||
# This script will remove the Bun installation at the location of this
|
||||
# script, removing it from %PATH%, deleting caches, and removing it from
|
||||
# the list of installed programs.
|
||||
param(
|
||||
[switch]$PauseOnError = $false
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
# These two environment functions are roughly copied from https://github.com/prefix-dev/pixi/pull/692
|
||||
# They are used instead of `SetEnvironmentVariable` because of unwanted variable expansions.
|
||||
function Write-Env {
|
||||
param([String]$Key, [String]$Value)
|
||||
|
||||
$EnvRegisterKey = Get-Item -Path 'HKCU:Environment'
|
||||
if ($null -eq $Value) {
|
||||
$EnvRegisterKey.DeleteValue($Key)
|
||||
} else {
|
||||
$RegistryValueKind = if ($Value.Contains('%')) {
|
||||
[Microsoft.Win32.RegistryValueKind]::ExpandString
|
||||
} elseif ($EnvRegisterKey.GetValue($Key)) {
|
||||
$EnvRegisterKey.GetValueKind($Key)
|
||||
} else {
|
||||
[Microsoft.Win32.RegistryValueKind]::String
|
||||
}
|
||||
$EnvRegisterKey.SetValue($Key, $Value, $RegistryValueKind)
|
||||
}
|
||||
}
|
||||
|
||||
function Get-Env {
|
||||
param([String] $Key)
|
||||
|
||||
$RegisterKey = Get-Item -Path 'HKCU:Environment'
|
||||
$EnvRegisterKey.GetValue($Key, $null, [Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames)
|
||||
}
|
||||
|
||||
if (-not (Test-Path "${PSScriptRoot}\bin\bun.exe")) {
|
||||
Write-Host "bun.exe not found in ${PSScriptRoot}\bin`n`nRefusing to delete this directory as it may.`n`nIf this uninstallation is still intentional, please just manually delete this folder."
|
||||
if ($PauseOnError) { pause }
|
||||
exit 1
|
||||
}
|
||||
|
||||
function Stop-Bun {
|
||||
try {
|
||||
Get-Process -Name bun | Where-Object { $_.Path -eq "${PSScriptRoot}\bin\bun.exe" } | Stop-Process -Force
|
||||
} catch [Microsoft.PowerShell.Commands.ProcessCommandException] {
|
||||
# ignore
|
||||
} catch {
|
||||
Write-Host "There are open instances of bun.exe that could not be automatically closed."
|
||||
if ($PauseOnError) { pause }
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
# Remove ~\.bun\bin\bun.exe
|
||||
try {
|
||||
Stop-Bun
|
||||
Remove-Item "${PSScriptRoot}\bin\bun.exe" -Force
|
||||
} catch {
|
||||
# Try a second time
|
||||
Stop-Bun
|
||||
Start-Sleep -Seconds 1
|
||||
try {
|
||||
Remove-Item "${PSScriptRoot}\bin\bun.exe" -Force
|
||||
} catch {
|
||||
Write-Host $_
|
||||
Write-Host "`n`nCould not delete ${PSScriptRoot}\bin\bun.exe."
|
||||
Write-Host "Please close all instances of bun.exe and try again."
|
||||
if ($PauseOnError) { pause }
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
# Remove ~\.bun
|
||||
try {
|
||||
Remove-Item "${PSScriptRoot}" -Recurse -Force
|
||||
} catch {
|
||||
Write-Host "Could not delete ${PSScriptRoot}."
|
||||
if ($PauseOnError) { pause }
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Delete some tempdir files. Do not fail if an error happens here
|
||||
try {
|
||||
Remove-Item "${Temp}\bun-*" -Recurse -Force
|
||||
} catch {}
|
||||
try {
|
||||
Remove-Item "${Temp}\bunx-*" -Recurse -Force
|
||||
} catch {}
|
||||
|
||||
# Remove Entry from path
|
||||
try {
|
||||
$Path = Get-Env -Key 'Path'
|
||||
$Path = $Path -split ';'
|
||||
$Path = $Path | Where-Object { $_ -ne "${PSScriptRoot}\bin" }
|
||||
Write-Env -Key 'Path' -Value ($Path -join ';')
|
||||
} catch {
|
||||
Write-Host "Could not remove ${PSScriptRoot}\bin from PATH."
|
||||
if ($PauseOnError) { pause }
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Remove Entry from Windows Installer, if it is owned by this installation.
|
||||
try {
|
||||
$item = Get-Item "HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\Bun";
|
||||
$location = $item.GetValue("InstallLocation");
|
||||
if ($location -eq "${PSScriptRoot}") {
|
||||
Remove-Item "HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\Bun" -Recurse
|
||||
}
|
||||
} catch {
|
||||
# unlucky tbh
|
||||
}
|
||||
Reference in New Issue
Block a user