# UWP卸载工具 **Repository Path**: aloot-cold/uwp-uninstaller ## Basic Information - **Project Name**: UWP卸载工具 - **Description**: 一款基于 **WinUI 3** (Windows App SDK) + **.NET 8** 的 UWP 应用卸载工具, 支持清理注册表与残留文件,可卸载普通 UWP 应用、Microsoft Edge 与 Windows 安全中心。 - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-07 - **Last Updated**: 2026-10-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # UWP 卸载工具 (UWPUninstaller) 一款基于 **WinUI 3** (Windows App SDK 1.6) + **.NET 8** 的 Windows 应用卸载与维护工具。 支持枚举并卸载普通 UWP/MSIX 应用、Microsoft Edge 相关组件与 Windows 安全中心, 并可清理卸载后的残留文件与注册表项。 > 工具完全**离线运行**,不收集、不上传任何个人数据,也不包含任何遥测。 > 详见下方「隐私」一节。 ## 特性 - **全量 UWP 枚举**:使用 `Windows.Management.Deployment.PackageManager` 列出本机所有已安装包(含系统应用)。 - **特殊应用卸载**: - Microsoft Edge 相关组件(UWP 部分 + Edge Update) - Windows 安全中心(`Microsoft.SecHealthUI` 等) - 普通 UWP / MSIX 应用 - **残留清理**: - `AppData` / `LocalAppData` / `ProgramData` 中与包相关的目录 - 注册表(HKCU / HKLM)中与 UWP 包相关的键值 - 资源管理器 `AppCompatFlags\Layers` 中对应 exe 的条目 - **深浅主题**:自动 / 浅色 / 深色,运行时即时切换。 - **多语言**:简体中文 / English / 日本語(基于嵌入 `.resw` 查表,无需系统语言切换即可生效)。 - **系统健康 / 实用工具**:额外的系统信息与实用工具页面(`HealthPage`、`UtilitiesPage`)。 - **UI**: - 侧边栏(`NavigationView`)默认收起 - 设置、实用工具、系统健康放在侧边栏,关于在最底部 - 卡片化、柔和圆角、统一强调色 - **安全权限模型**:默认以**标准用户**(`asInvoker`)运行;仅当卸载受保护系统应用需要提权时, 通过应用内「以管理员身份重新启动」按钮一次性请求 UAC 提权(见「权限模型」)。 ## 系统要求 - Windows 10 1809 (17763) 或更高(推荐 Windows 11) - 最低 4 GB 内存(自包含分发内含 .NET 8 运行时) - 卸载系统应用 / 受保护应用需要**管理员权限**(标准用户可正常浏览列表) ## 目录结构 ``` UWPUninstaller/ ├── UWPUninstaller.sln # 解决方案(主工程 + WAP 打包工程) ├── Directory.Build.props # 共享 MSBuild 属性 ├── UWPUninstaller/ # 主工程(WinUI 3 应用) │ ├── UWPUninstaller.csproj │ ├── app.manifest # asInvoker 执行级别 + DPI 感知 │ ├── App.xaml / App.xaml.cs # 应用入口 + DI 容器 │ ├── MainWindow.xaml(.cs) # 主窗口 / NavigationView 框架 │ ├── Views/ │ │ ├── HomePage.xaml(.cs) # 已安装应用列表 │ │ ├── UtilitiesPage.xaml(.cs) # 实用工具 │ │ ├── HealthPage.xaml(.cs) # 系统 / 存储健康 │ │ ├── SettingsPage.xaml(.cs) # 主题 / 语言 / 清理行为 │ │ └── AboutPage.xaml(.cs) # 关于(侧边栏最底) │ ├── ViewModels/ # CommunityToolkit.Mvvm │ ├── Models/ # InstalledApp / NavMenuItem / UtilityItem │ ├── Services/ │ │ ├── UninstallService.cs # 卸载(UWP / Edge / 安全中心) │ │ ├── UtilityService.cs # 实用工具逻辑 │ │ ├── ResidualCleaner.cs # 残留清理(AppData / 注册表) │ │ ├── LocalizationService.cs # 嵌入 resw 查表本地化 │ │ ├── ThemeService.cs # 深浅主题切换 │ │ ├── SettingsStore.cs # 本地 JSON 设置(%LOCALAPPDATA%) │ │ ├── AppDeployment.cs # 自包含部署辅助 │ │ ├── EdgeNativeHelper.cs # Edge 卸载原生调用 │ │ └── SystemInfoService.cs # 系统信息 │ ├── Styles/ # 卡片 / 按钮 / 标题样式 │ ├── Converters/ │ ├── Strings/ # .resw 资源:zh-CN / en-US / ja-JP │ ├── Assets/ # 图标 / 启动屏(app.ico 等) │ └── Properties/PublishProfiles/ # win-x86 / win-x64 / win-x64-self-contained / win-arm64 └── UWPUninstaller (Package)/ # WAP 打包工程(生成 .msix / .msixupload) ├── UWPUninstaller (Package).wapproj ├── Package.appxmanifest # Identity / 能力 / 图标 / 版本 ├── Packaging.props # WindowsAppSDKSelfContained 等打包属性 ├── Package.StoreAssociation.xml # Microsoft Store 关联(见「打包与分发」) └── Images/ # 商店 / 磁贴图标 ``` > 说明:仓库内的 `tools/`(第三方 NSIS 编译器)与 `Installer/`(NSIS 安装脚本与产物) > 属于本地打包辅助,不属于源码工程,故未列入上方结构。 ## 构建与运行 ### 推荐:使用 Visual Studio 本工程依赖 Windows App SDK 的 MSBuild 打包任务(`Microsoft.Build.Packaging.Pri.Tasks`), **必须通过 Visual Studio 2022 17.10+ 构建**(`dotnet` CLI 在缺少上述任务的環境下无法构建 WinUI 项目)。 所需工作负载: - 「.NET 桌面开发」 - 「Windows 应用开发」/ 「Windows App SDK C# 模板」 - .NET 8 SDK、Windows App SDK 1.6 步骤: 1. 用 Visual Studio 打开 `UWPUninstaller.sln`。 2. 选择配置 `Release`、平台 `x86` 或 `x64`。 3. 右键主工程 **UWPUninstaller** → 生成。 4. 生成的未打包(unpackaged)自包含程序位于: ``` UWPUninstaller/bin//Release/net8.0-windows10.0.19041.0/win-/UWPUninstaller.exe ``` ### 命令行参考(需在含 Windows App SDK 构建任务的環境下) ```bash # 还原依赖 dotnet restore UWPUninstaller/UWPUninstaller.csproj # 构建(需要本机具备 Windows App SDK 构建任务,通常通过 VS 开发者命令行) dotnet build UWPUninstaller/UWPUninstaller.csproj -c Release -p:Platform=x64 ``` > 若直接运行 `dotnet build` 报缺少 `Microsoft.Build.Packaging.Pri.Tasks` 等任务, > 说明当前环境没有 Windows App SDK 打包组件,请改用 Visual Studio 构建。 ## 权限模型(重要) - 应用清单**显式声明 `requestedExecutionLevel = asInvoker`**(标准用户级别)。 - 不声明执行级别时,Windows 的 **UAC 安装程序检测** 会因程序名含 "Uninstall" 而对未打包 exe 错误地弹出管理员授权,因此必须显式声明。 - **严禁使用 `requireAdministrator`**:MSIX / AppX 激活路径不支持「启动即要求管理员」, 会返回 `0x80070032`(`ERROR_NOT_SUPPORTED`),导致开始菜单 / 任务栏无法启动打包版。 - 当卸载系统应用或受保护应用需要管理员权限时,应用内提供 「以管理员身份重新启动」按钮:通过 `ShellExecute("runas")` 让自身以管理员身份重新启动、 当前实例退出。提权仅限本次操作,不会在后台持续以管理员身份运行。 ## 隐私 本工具以「默认不收集、不上传、不追踪」为原则: - **不收集**任何个人身份信息、设备唯一标识(MAC / 序列号 / CPU ID 等)或地理位置。 - **不发起任何网络连接**,不包含遥测(Telemetry)、使用情况分析或崩溃上报。 - 仅在本机内存中临时读取以下数据以生成可卸载列表,绝不写出到工具目录之外或上传: - 已安装 UWP/MSIX 包信息(通过 `PackageManager` API) - `HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall` 及其 WOW6432Node 分支 - 应用图标与显示名称 - 设置(语言、主题、窗口尺寸等)以本地 JSON 保存于 `%LOCALAPPDATA%\UWPUninstaller`,不同步云端。 - 自包含打包内的 .NET 8 / WinUI 3 等组件均不启用任何联网或遥测功能。 安装程序在安装流程中展示完整的隐私政策页,须勾选同意后方可继续安装。 ## 多语言 本地化不走 WinRT 的 `PrimaryLanguageOverride`(在本项目 self-contained 形态下不可靠), 而是将三套 `.resw` 作为 `EmbeddedResource` 嵌入程序集,运行时直接查表: UI 元素通过 `Tag` 标记 key,`LocalizationService.ApplyTo` 递归写入文本。 新增语言: 1. 在 `Strings//` 下新建 `Resources.resw`; 2. 在 `ILocalizationService.Available` 追加语言项; 3. 在 `LocalizationService` 中追加对应区域性解析逻辑。 ## 打包与分发 打包采用 **WAP 双工程** 模式:主工程负责应用本身, `UWPUninstaller (Package)`(`.wapproj`)负责产出可分发包。 ### 通过 Visual Studio 打包 1. 在解决方案资源管理器中右键 **UWPUninstaller (Package)** 工程。 2. 选择 **打包并发布 → 创建应用包**。 3. 选择目标: - **Microsoft Store**:关联商店账户后生成 `.msixupload`(用于提交商店)。 - **旁加载 (Sideload)**:生成 `.msix` + `.cer`(自签名证书,用于手动分发)。 4. 勾选 `x86` 与 `x64` 两种架构;版本号须高于已发布版本。 ### 关键打包约定 - `WindowsAppSDKSelfContained=true`(在 `Packaging.props` 中设置,WAP 同样需要, 否则清单会注入框架依赖、旁加载启动即崩溃)。 - `AppxBundlePlatforms` 使用分号分隔:`x86;x64`。 - 商店身份(Publisher `CN=8CB4F719-...`)与旁加载证书身份统一,避免提交时报 「无效的软件包系列名称 / 发布者名称」。 - 能力仅保留 `runFullTrust`(已通过商店审批);移除 `unvirtualizedResources` 后不再需要额外审批。 ### Microsoft Store - 应用已上架 Microsoft Store,应用 ID:**`9PDLTM3H6Q6C`**。 - 分类:**Utilities & tools → Backup & manage**。 - 商店版会隐藏 Edge / Windows 安全中心入口(列表过滤 + 按钮隐藏 + 命令拦截三层防护), 以符合商店认证政策;旁加载版保留全部功能。 ### 从 Microsoft Store 获取 ## 扩展点 ### 添加新的「特殊应用」 1. 在 `UninstallService` 的 `*Families` 数组里添加 `PackageFamilyName` 关键字; 2. 实现对应的 `UninstallXxxAsync` 方法; 3. 在 `IUninstallService` 中暴露接口; 4. 在对应 `ViewModel` 与 `.xaml` 中绑定按钮。 ### 新增实用工具 / 页面 - 在 `Views/` 新增页面,在 `MainWindow` 的 `NavigationView` 菜单注册; - 业务逻辑放入 `Services/`(参考 `UtilityService`)。 ## 已知限制 - Windows 安全中心在某些系统上受 **Inbox Apps** 保护,需进入「安全模式」或使用 DISM 才能彻底移除; 本工具尽力移除可见 UWP 包,失败会返回原因。 - Edge 已是 Win32 + WebView2,完全卸载需从 `edge://settings/help` 内部触发; 本工具尽力调用 Edge Update 安装器 `--force-uninstall`。 - 标准(非管理员)用户可浏览应用列表,但卸载系统级应用会被 UAC 拦截,需先点击「以管理员身份重新启动」。 ## 免责声明 本工具会修改系统已安装应用与注册表,可能影响系统稳定性。 使用前**请先创建系统还原点**,并确认你要卸载的对象。使用本工具所产生的任何后果由使用者自行承担。