Files
App-Installer-For-Windows-8…/shared/ArmUninstall.ps1

153 lines
5.2 KiB
PowerShell

#Requires -RunAsAdministrator
Push-Location $PSScriptRoot
try {
# 语言检测函数
function Get-Language {
$lang = [System.Globalization.CultureInfo]::CurrentUICulture.TwoLetterISOLanguageName
if ($lang -eq "zh") { return "zh" }
return "en"
}
$lang = Get-Language
# 本地化消息
$messages = @{
en = @{
title = "Uninstall Desktop App Installer"
confirm = "Are you sure you want to uninstall Desktop App Installer? (y/n)"
invalid = "Invalid input. Please enter y or n."
removing_start = "Removing Start Menu folder..."
removing_reg = "Removing registry entries..."
removing_dir = "Removing installation directory..."
confirm_dir = "Do you also want to delete the installation directory? (y/n)"
complete = "Uninstallation complete."
error = "Error: "
cancelled = "Uninstall cancelled."
}
zh = @{
title = "卸载 Desktop App Installer"
confirm = "确定要卸载 Desktop App Installer 吗?(y/n)"
invalid = "无效输入,请输入 y 或 n。"
removing_start = "正在删除开始菜单文件夹..."
removing_reg = "正在删除注册表项..."
removing_dir = "正在删除安装目录..."
confirm_dir = "是否同时删除安装目录?(y/n)"
complete = "卸载完成。"
error = "错误:"
cancelled = "卸载已取消。"
}
}
$msg = $messages[$lang]
if ($env:PROCESSOR_ARCHITECTURE.Trim() -ne "ARM") {
throw "Error: Cannot continue installation because the computer's processor architecture is not ARM."
}
# 确认卸载(控制台交互)
do {
$response = Read-Host $msg.confirm
$response = $response.ToLower()
if ($response -eq 'y') {
$confirmed = $true
break
} elseif ($response -eq 'n') {
Write-Host $msg.cancelled
exit 0
} else {
Write-Host $msg.invalid
}
} while ($true)
# 定义路径
$appStartMenuFolder = "Desktop App Installer"
$appPublicStartMenuFolder = [System.IO.Path]::Combine($env:ProgramData, "Microsoft\Windows\Start Menu\Programs")
$startitemfolder = [System.IO.Path]::Combine($appPublicStartMenuFolder, $appStartMenuFolder)
$AppFolder = $PSScriptRoot
# 删除开始菜单文件夹
Write-Host $msg.removing_start
if (Test-Path $startitemfolder) {
Remove-Item -Path $startitemfolder -Recurse -Force -ErrorAction SilentlyContinue
if (Test-Path $startitemfolder) {
Write-Warning "$msg.error Could not remove $startitemfolder"
} else {
Write-Output "Removed $startitemfolder"
}
} else {
Write-Output "Start Menu folder not found, skipping."
}
# 删除注册表项
Write-Host $msg.removing_reg
$reg = [Microsoft.Win32.Registry]::ClassesRoot
$keysToDelete = @(
"Microsoft.DesktopAppInstaller",
".appx",
".appxbundle"
)
foreach ($keyName in $keysToDelete) {
try {
if ($reg.OpenSubKey($keyName) -ne $null) {
$reg.DeleteSubKeyTree($keyName)
Write-Output "Removed registry key: HKCR\$keyName"
} else {
Write-Output "Registry key not found: HKCR\$keyName"
}
} catch {
Write-Warning "$msg.error Could not remove HKCR\$keyName : $_"
}
}
# 删除 Applications\AppInstaller.exe 下的 DefaultIcon
$appPath = "Applications\AppInstaller.exe"
try {
$appKey = $reg.OpenSubKey($appPath, $true)
if ($appKey) {
$subKeyNames = $appKey.GetSubKeyNames()
if ($subKeyNames -contains "DefaultIcon") {
$appKey.DeleteSubKey("DefaultIcon")
Write-Output "Removed registry key: HKCR\$appPath\DefaultIcon"
}
$appKey.Close()
} else {
Write-Output "Registry key not found: HKCR\$appPath"
}
} catch {
Write-Warning "$msg.error Could not process HKCR\$appPath : $_"
}
# 删除安装目录
Write-Host $msg.removing_dir
do {
$respDir = Read-Host $msg.confirm_dir
$respDir = $respDir.ToLower()
if ($respDir -eq 'y') {
if (Test-Path $AppFolder) {
Remove-Item -Path $AppFolder -Recurse -Force -ErrorAction SilentlyContinue
if (Test-Path $AppFolder) {
Write-Warning "$msg.error Could not delete $AppFolder"
} else {
Write-Output "Deleted installation directory."
}
} else {
Write-Output "Installation directory not found."
}
break
} elseif ($respDir -eq 'n') {
Write-Output "Skipped deleting installation directory."
break
} else {
Write-Host $msg.invalid
}
} while ($true)
Write-Host $msg.complete
Start-Sleep -Seconds 3
} catch {
Write-Error "Uninstall failed: $_"
} finally {
Pop-Location
}