Hotdry Blog

Article

三星 Magician 磁盘工具 18 步卸载流程解析与 PowerShell 自动化清理方案

针对三星 Magician 在卸载时遗留的注册表键与服务挂起问题,解析其 18 步卸载难点并给出完整 PowerShell 自动化清理脚本。

2026-04-03systems

在日常维护中,三星旗下的磁盘管理工具 Samsung Magician 因其功能相对单一却体积庞大、卸载流程繁琐而备受诟病。国外博主 Chalmovský 在一次实战中记录了完整的 18 步卸载过程,并指出即使走完所有步骤,系统仍可能出现残留注册表项、驱动程序未卸载以及后台服务挂起的现象。本文在原文基础上抽取关键步骤,结合 Windows 环境的实际残留点,深入剖析根因并提供可直接使用的 PowerShell 自动化清理脚本。

一、18 步卸载流程概览(基于原 macOS 步骤的映射)

以下步骤与原文中列出的 18 步相对应,只是将其映射到 Windows 环境中的典型残留位置,便于后续脚本精准定位:

  1. 寻找卸载按钮—— 在程序菜单或 “设置 → 应用” 中查找 “卸载”。
  2. 运行内置清理脚本—— 多数安装包会携带 Cleanup*.ps1unins000.exe,但往往会因权限不足而失败。
  3. 手动删除主程序目录(如 C:\Program Files\Samsung\Samsung Magician)。
  4. 删除用户配置%APPDATA%\Samsung\Samsung Magician)。
  5. 清理缓存%LOCALAPPDATA%\Samsung\Samsung Magician)。
  6. 移除启动项(计划任务、启动文件夹)。
  7. 关闭并删除相关服务(如 SamsungMagicianService)。
  8. 删除驱动(常见驱动名 magdrvamd64.sysSamsung NVMe Driver 等)。
  9. 清理注册表键—— 包括 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{GUID}HKLM\SOFTWARE\Samsung\Samsung Magician 等。
  10. 搜索残留文件(使用 Get-ChildItem -Recurse 查找剩余的 *samsung*magician*)。
  11. 二次确认计划任务Get-ScheduledTask | Where-Object {$_.TaskName -like "*Samsung*"})。
  12. 删除事件日志源(若在系统日志中留下来源)。
  13. 检查驱动签名(确认.sys 文件已卸载,否则会导致蓝屏)。
  14. 确认残余服务已停止Get-Service -Name "*Samsung*")。
  15. 重启后再次扫描—— 有时文件被锁定需重启后方可删除。
  16. 使用系统自带的磁盘清理(清理临时文件)。
  17. 手动编辑安全策略(如需删除受 SIP 保护的内核扩展,在 Windows 中对应的是受保护的驱动)。
  18. 最终验证—— 确保无残留注册表、服务、文件。

需要说明的是,原文的 18 步是针对 macOS 系统的,但在 Windows 平台同样会面临注册表残留、服务挂起、驱动未卸载等典型问题。因此,下面的根因分析直接聚焦于 Windows 环境。

二、注册表残留与服务挂起的根因分析

2.1 不完整的卸载程序

Samsung Magician 的官方卸载程序 unins000.exe 往往只删除可执行文件本身,却忽略了以下几类注册表键:

  • Uninstall 注册表项HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{<GUID>} 以及对应的 Wow6432Node 路径。
  • 产品键HKLM\SOFTWARE\Samsung\Samsung MagicianHKCU\Software\Samsung\Samsung Magician
  • 驱动键HKLM\SYSTEM\CurrentControlSet\Services\magdrvamd64HKLM\SYSTEM\CurrentControlSet\Services\SamsungNVMe

2.2 服务与驱动未释放

Magician 安装时会注册系统服务 SamsungMagicianService,并在 C:\Windows\System32\drivers 目录下放置驱动文件(如 magdrvamd64.sys)。如果在卸载前未显式停止服务或卸载驱动,系统重启后会出现 “服务挂起” 状态,导致后续重新安装时报错或蓝屏。

2.3 计划任务与启动项残留

程序常在任务计划程序中创建名为 SamsungMagicianUpdateSamsungMagicianStartup 的任务,用于自动检测固件更新或启动托盘程序。这些任务在卸载后若不手动删除,会在后台保持运行,消耗资源并可能导致 “服务仍然活动” 的误判。

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

使用说明

  1. 权限:脚本必须在管理员权限的 PowerShell 中运行(Run as Administrator)。
  2. 备份:建议在运行前导出需要清理的注册表分支(如 HKLM:\SOFTWARE\Samsung)或创建系统还原点。
  3. 检查日志:脚本会在 %TEMP% 目录生成带时间戳的日志文件,便于事后审计。
  4. 重启:清理完成后务必重启系统,以彻底卸载内核驱动并释放文件句柄。
  5. 二次检查:重启后执行 Get-Service -Name "*Samsung*"Get-PnpDevice | Where-Object {$_.FriendlyName -like "*Samsung*"} 确认无残留。

四、关键参数与监控点

  • 服务检测:使用 Get-Service -Name "*Samsung*" 监控是否有残余服务。
  • 驱动状态:通过 Get-PnpDevice -Class Systemdriverquery /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),该文详细记录了卸载过程中的各类异常情况,为本文的根因分析提供了重要参考。

systems