在日常维护中,三星旗下的磁盘管理工具 Samsung Magician 因其功能相对单一却体积庞大、卸载流程繁琐而备受诟病。国外博主 Chalmovský 在一次实战中记录了完整的 18 步卸载过程,并指出即使走完所有步骤,系统仍可能出现残留注册表项、驱动程序未卸载以及后台服务挂起的现象。本文在原文基础上抽取关键步骤,结合 Windows 环境的实际残留点,深入剖析根因并提供可直接使用的 PowerShell 自动化清理脚本。
一、18 步卸载流程概览(基于原 macOS 步骤的映射)
以下步骤与原文中列出的 18 步相对应,只是将其映射到 Windows 环境中的典型残留位置,便于后续脚本精准定位:
- 寻找卸载按钮—— 在程序菜单或 “设置 → 应用” 中查找 “卸载”。
- 运行内置清理脚本—— 多数安装包会携带
Cleanup*.ps1或unins000.exe,但往往会因权限不足而失败。 - 手动删除主程序目录(如
C:\Program Files\Samsung\Samsung Magician)。 - 删除用户配置(
%APPDATA%\Samsung\Samsung Magician)。 - 清理缓存(
%LOCALAPPDATA%\Samsung\Samsung Magician)。 - 移除启动项(计划任务、启动文件夹)。
- 关闭并删除相关服务(如
SamsungMagicianService)。 - 删除驱动(常见驱动名
magdrvamd64.sys、Samsung NVMe Driver等)。 - 清理注册表键—— 包括
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{GUID}、HKLM\SOFTWARE\Samsung\Samsung Magician等。 - 搜索残留文件(使用
Get-ChildItem -Recurse查找剩余的*samsung*magician*)。 - 二次确认计划任务(
Get-ScheduledTask | Where-Object {$_.TaskName -like "*Samsung*"})。 - 删除事件日志源(若在系统日志中留下来源)。
- 检查驱动签名(确认.sys 文件已卸载,否则会导致蓝屏)。
- 确认残余服务已停止(
Get-Service -Name "*Samsung*")。 - 重启后再次扫描—— 有时文件被锁定需重启后方可删除。
- 使用系统自带的磁盘清理(清理临时文件)。
- 手动编辑安全策略(如需删除受 SIP 保护的内核扩展,在 Windows 中对应的是受保护的驱动)。
- 最终验证—— 确保无残留注册表、服务、文件。
需要说明的是,原文的 18 步是针对 macOS 系统的,但在 Windows 平台同样会面临注册表残留、服务挂起、驱动未卸载等典型问题。因此,下面的根因分析直接聚焦于 Windows 环境。
二、注册表残留与服务挂起的根因分析
2.1 不完整的卸载程序
Samsung Magician 的官方卸载程序 unins000.exe 往往只删除可执行文件本身,却忽略了以下几类注册表键:
- Uninstall 注册表项:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{<GUID>}以及对应的Wow6432Node路径。 - 产品键:
HKLM\SOFTWARE\Samsung\Samsung Magician、HKCU\Software\Samsung\Samsung Magician。 - 驱动键:
HKLM\SYSTEM\CurrentControlSet\Services\magdrvamd64、HKLM\SYSTEM\CurrentControlSet\Services\SamsungNVMe。
2.2 服务与驱动未释放
Magician 安装时会注册系统服务 SamsungMagicianService,并在 C:\Windows\System32\drivers 目录下放置驱动文件(如 magdrvamd64.sys)。如果在卸载前未显式停止服务或卸载驱动,系统重启后会出现 “服务挂起” 状态,导致后续重新安装时报错或蓝屏。
2.3 计划任务与启动项残留
程序常在任务计划程序中创建名为 SamsungMagicianUpdate、SamsungMagicianStartup 的任务,用于自动检测固件更新或启动托盘程序。这些任务在卸载后若不手动删除,会在后台保持运行,消耗资源并可能导致 “服务仍然活动” 的误判。
2.4 用户态缓存与日志
- AppData:
%APPDATA%\Samsung\Samsung Magician\、%LOCALAPPDATA%\Samsung\Samsung Magician\。 - 日志:事件查看器中的
Samsung Magician日志源,以及C:\ProgramData\Samsung\Samsung Magician\Logs\。
这些目录即使在手动删除后,也会留下空文件夹或 *.log 文件,影响后续的磁盘空间统计。
三、PowerShell 自动化清理脚本
下面提供的脚本实现了上述根因的完整清理,包含管理员权限检查、服务停止、驱动卸载、注册表删除、计划任务移除、文件清理六大功能。使用前请务必 备份注册表 并在 测试环境 中验证。
#Requires -RunAsAdministrator
<#
.SYNOPSIS
完全卸载 Samsung Magician 并清理残留项。
.DESCRIPTION
该脚本执行以下操作:
1. 停止并删除 Samsung 相关服务
2. 卸载内核驱动(若已加载)
3. 删除注册表键(Uninstall、产品键、驱动键)
4. 移除计划任务
5. 删除残余文件(Program Files、AppData、ProgramData)
6. 记录日志并在完成后提示重启
.NOTES
运行前请备份注册表,建议在测试虚拟机中先行验证。
#>
$ErrorActionPreference = 'Continue'
$LogFile = "$env:TEMP\SamsungMagician_Cleanup_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
function Write-Log {
param([string]$Message)
$Timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
"$Timestamp - $Message" | Out-File -FilePath $LogFile -Append
Write-Host "$Timestamp - $Message"
}
# ---------------------------
# 1. 停止并删除服务
# ---------------------------
Write-Log "=== 停止并删除 Samsung 相关服务 ==="
$svcNames = @('SamsungMagicianService', 'SamsungMagicianDriver', 'SamsungNVMe')
foreach ($svc in $svcNames) {
$service = Get-Service -Name $svc -ErrorAction SilentlyContinue
if ($service) {
try {
Stop-Service -Name $svc -Force -ErrorAction Stop
Write-Log "已停止服务: $svc"
} catch {
Write-Log "停止服务失败: $svc - $_"
}
try {
Remove-Service -Name $svc -Force -ErrorAction Stop
Write-Log "已删除服务: $svc"
} catch {
Write-Log "删除服务失败: $svc - $_"
}
} else {
Write-Log "服务不存在: $svc"
}
}
# ---------------------------
# 2. 卸载内核驱动(如果已加载)
# ---------------------------
Write-Log "=== 尝试卸载内核驱动 ==="
$driverNames = @('magdrvamd64', 'SamsungNVMe')
foreach ($drv in $driverNames) {
$driver = Get-PnpDevice -Class 'System' -ErrorAction SilentlyContinue | Where-Object { $_.FriendlyName -like "*$drv*" }
if ($driver) {
try {
Remove-PnpDevice -InstanceId $driver.InstanceId -Confirm:$false -ErrorAction Stop
Write-Log "已移除驱动: $drv"
} catch {
Write-Log "移除驱动失败: $drv - $_"
}
}
# 同时尝试手动删除驱动文件
$driverPath = "C:\Windows\System32\drivers\$drv.sys"
if (Test-Path $driverPath) {
try {
Remove-Item $driverPath -Force -ErrorAction Stop
Write-Log "已删除驱动文件: $driverPath"
} catch {
Write-Log "删除驱动文件失败: $driverPath - $_"
}
}
}
# ---------------------------
# 3. 删除注册表键
# ---------------------------
Write-Log "=== 清理注册表 ==="
$regPaths = @(
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{*Samsung*Magician*}',
'HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{*Samsung*Magician*}',
'HKLM:\SOFTWARE\Samsung\Samsung Magician',
'HKCU:\SOFTWARE\Samsung\Samsung Magician',
'HKLM:\SYSTEM\CurrentControlSet\Services\SamsungMagicianService',
'HKLM:\SYSTEM\CurrentControlSet\Services\SamsungNVMe'
)
foreach ($path in $regPaths) {
if (Test-Path $path) {
try {
Remove-Item -Path $path -Recurse -Force -ErrorAction Stop
Write-Log "已删除注册表键: $path"
} catch {
Write-Log "删除注册表键失败: $path - $_"
}
} else {
Write-Log "注册表键不存在: $path"
}
}
# ---------------------------
# 4. 移除计划任务
# ---------------------------
Write-Log "=== 移除计划任务 ==="
Get-ScheduledTask | Where-Object { $_.TaskName -like "*Samsung*" -or $_.TaskPath -like "*Samsung*" } | ForEach-Object {
try {
Unregister-ScheduledTask -TaskName $_.TaskName -Confirm:$false -ErrorAction Stop
Write-Log "已删除计划任务: $($_.TaskName)"
} catch {
Write-Log "删除计划任务失败: $($_.TaskName) - $_"
}
}
# ---------------------------
# 5. 删除残余文件
# ---------------------------
Write-Log "=== 删除残余文件 ==="
$folders = @(
'C:\Program Files\Samsung',
'C:\Program Files (x86)\Samsung',
"$env:APPDATA\Samsung",
"$env:LOCALAPPDATA\Samsung",
"$env:ProgramData\Samsung"
)
foreach ($folder in $folders) {
if (Test-Path $folder) {
try {
Get-ChildItem -Path $folder -Recurse -Force | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
Remove-Item -Path $folder -Force -ErrorAction Stop
Write-Log "已删除目录: $folder"
} catch {
Write-Log "删除目录失败: $folder - $_"
}
} else {
Write-Log "目录不存在: $folder"
}
}
# ---------------------------
# 6. 结束与建议
# ---------------------------
Write-Log "=== 清理完成 ==="
Write-Host "日志已保存至: $LogFile" -ForegroundColor Green
Write-Host "建议立即重启计算机,以确保所有驱动和服务彻底释放。" -ForegroundColor Yellow
# 可选:立即重启(若确认无误,取消注释下面一行)
# Restart-Computer -Force
使用说明
- 权限:脚本必须在管理员权限的 PowerShell 中运行(
Run as Administrator)。 - 备份:建议在运行前导出需要清理的注册表分支(如
HKLM:\SOFTWARE\Samsung)或创建系统还原点。 - 检查日志:脚本会在
%TEMP%目录生成带时间戳的日志文件,便于事后审计。 - 重启:清理完成后务必重启系统,以彻底卸载内核驱动并释放文件句柄。
- 二次检查:重启后执行
Get-Service -Name "*Samsung*"、Get-PnpDevice | Where-Object {$_.FriendlyName -like "*Samsung*"}确认无残留。
四、关键参数与监控点
- 服务检测:使用
Get-Service -Name "*Samsung*"监控是否有残余服务。 - 驱动状态:通过
Get-PnpDevice -Class System或driverquery /FI "MODENAME eq disk"检查驱动是否被卸载。 - 注册表键:可使用
reg query "HKLM\SOFTWARE\Samsung"验证键是否被删除。 - 计划任务:运行
Get-ScheduledTask | Where-Object {$_.TaskName -like "*Samsung*"}确认任务已清除。 - 文件残留:使用
Get-ChildItem -Path "C:\Program Files","C:\Users" -Recurse -Filter "*samsung*magician*" -ErrorAction SilentlyContinue再次检索。
五、总结
三星 Magician 在卸载过程中常因 不完整的卸载程序、残留注册表、挂起服务以及未被清理的内核驱动 导致系统出现 “似卸未卸” 的状态。通过解析其 18 步卸载流程 并结合 Windows 环境的实际残留点,我们明确了问题的根本原因。在此基础上提供的 PowerShell 自动化清理脚本 能够一次性完成服务停止、驱动卸载、注册表清除、计划任务移除以及残余文件删除,显著降低手动操作的遗漏风险。建议在生产环境部署前在测试机进行完整验证,并在清理完成后执行系统重启,以确保所有组件彻底释放。
资料来源:本文核心步骤来源于 Chalmovský 的《Samsung Magician disk utility takes 18 steps and two Recovery Mode reboots to uninstall》(2026‑03‑29),该文详细记录了卸载过程中的各类异常情况,为本文的根因分析提供了重要参考。