如何移除Visual Studio创建的Windows 10开始菜单临时UWP应用
清理VS2015/2017生成的UWP测试应用残留
我完全懂你遇到的糟心情况——用VS开发UWP时,开始菜单和「应用和功能」里全是测试用的临时应用,有些甚至找不到卸载入口,手动删简直是噩梦。之前你试的那两个PowerShell脚本没完全解决问题,主要是因为它们只处理了当前用户的Appx包,没覆盖所有用户,也没清理残留的快捷方式和文件夹。
下面给你一套完整的解决方案,分步骤清理所有残留:
一、先理解之前脚本的问题
- 第一个脚本加了
Publisher过滤,会漏掉用你自己测试证书签名的临时应用(VS默认会生成临时证书); - 第二个脚本只处理当前用户的包,VS可能在其他用户上下文安装测试包;
- 不管哪个脚本,
Remove-AppxPackage只会卸载包,但不会自动删除开始菜单的快捷方式和本地残留的缓存文件夹。
二、完整清理脚本(需管理员身份运行)
1. 卸载所有用户的开发模式UWP包
这个脚本会遍历本地所有启用的用户,卸载每个用户下处于开发模式的UWP包:
# 获取本地所有启用的本地用户 $users = Get-WmiObject -Class Win32_UserAccount | Where-Object { $_.Disabled -eq $false -and $_.LocalAccount -eq $true } foreach ($user in $users) { $sid = $user.SID Write-Host "=== 处理用户: $($user.Name) (SID: $sid) ===" # 获取该用户下的开发模式Appx包 $targetPackages = Get-AppxPackage -AllUsers | Where-Object { $_.IsDevelopmentMode -eq $true -and $_.PackageUserInformation[$sid] -ne $null } if ($targetPackages) { $targetPackages | Remove-AppxPackage -AllUsers Write-Host "已卸载 $($targetPackages.Count) 个开发模式应用`n" } else { Write-Host "未找到该用户的开发模式应用`n" } }
2. 清理开始菜单的残留快捷方式
卸载包后,开始菜单里的快捷方式不会自动删除,这个脚本会扫描系统和用户的开始菜单目录,清理VS测试应用的快捷方式:
# 定义要扫描的开始菜单路径 $startMenuLocations = @( "$env:ProgramData\Microsoft\Windows\Start Menu\Programs", "$env:USERPROFILE\AppData\Roaming\Microsoft\Windows\Start Menu\Programs" ) foreach ($location in $startMenuLocations) { if (-not (Test-Path $location)) { Write-Host "路径不存在: $location`n" continue } Write-Host "=== 扫描开始菜单路径: $location ===" # 查找符合特征的快捷方式:名字含Test/Appx/_TemporaryKey,或内容关联微软开发包 $residualShortcuts = Get-ChildItem -Path $location -Filter "*.lnk" -Recurse | Where-Object { $_.Name -match "Test|Appx|_TemporaryKey" -or (Get-Content $_.FullName -Raw -ErrorAction SilentlyContinue) -match "Microsoft Corporation.*Development" } if ($residualShortcuts) { $residualShortcuts | Remove-Item -Force Write-Host "已删除 $($residualShortcuts.Count) 个残留快捷方式`n" } else { Write-Host "未找到残留快捷方式`n" } }
3. 清理本地缓存的残留包文件夹
有些包卸载后,%USERPROFILE%\AppData\Local\Packages里还会留下缓存文件夹,这个脚本会清理这些无对应Appx包的残留:
$packagesDir = "$env:USERPROFILE\AppData\Local\Packages" if (-not (Test-Path $packagesDir)) { Write-Host "Packages目录不存在: $packagesDir" exit } Write-Host "=== 扫描Packages目录残留: $packagesDir ===" $residualFolders = Get-ChildItem -Path $packagesDir | Where-Object { $folderName = $_.Name # 过滤:无对应Appx包,且名字含Test/Appx/_TemporaryKey(VS临时包特征) -not (Get-AppxPackage -Name $folderName -ErrorAction SilentlyContinue) -and $folderName -match "Test|Appx|_TemporaryKey" } if ($residualFolders) { $residualFolders | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue Write-Host "已删除 $($residualFolders.Count) 个残留包文件夹" } else { Write-Host "未找到残留包文件夹" }
三、使用注意事项
- 必须以管理员身份运行PowerShell,否则无法访问其他用户的Appx包和系统开始菜单目录;
- 建议先预览再删除:比如把脚本里的
Remove-AppxPackage改成Write-Output,Remove-Item改成Write-Output $_.FullName,先确认要删除的内容,避免误删; - 如果还有少量残留,可以手动去「应用和功能」里搜索
Appx、Test关键词,找到后卸载(有些可能需要右键→更多→卸载)。
内容的提问来源于stack exchange,提问作者Richard Chambers
相关产品推荐
相关产品推荐

