我的 Mac 为什么总在偷偷重装 Bing
我的 Mac 为什么总在偷偷重装 Bing?一次"删了又装"的排查实录 如果你也遇到过"明明手动删掉了某个 App,过几天它又自己回来了"的情况,这篇文章也许能帮你少走弯路
一、现象:薛定谔的 Bing
某天我打开"启动台",赫然发现两个从没主动想留着的 App 又冒出来了:
- Microsoft Bing Wallpaper(必应壁纸)
- Microsoft Bing for Safari(Safari 里的必应组件)
我明明手动删过好几次。删完当时是干净的,但过段时间——有时是第二天,有时是隔几天——它们又不声不响地回来了。像打不死的小强。
直觉告诉我:这不是巧合,背后一定有个"自动安装器"在周期性地还原它们。于是我决定把这只幕后黑手揪出来。
二、排查思路:谁在动我的应用?
macOS 上"偷偷自动装东西"的常见来源就那么几类,我按可能性从高到低逐一排查:
- LaunchDaemon / LaunchAgent:开机或定时执行的系统/用户任务(最常见的元凶)
- pkg 安装记录:系统里残留的
.pkgreceipt,可能触发"修复式重装" - 正在运行的进程:有没有微软相关的后台进程在轮询
- 安装日志:如果能找到安装日志,那就是铁证
排查全程只做只读操作(看文件、列目录、读配置),不动任何东西,确认原因后再动手。
三、逐步排查(附真实命令与输出)
1. 先看启动项里有没有微软/Bing 的影子
ls -1 /Library/LaunchDaemons/ | grep -iE "microsoft|bing|auto"
ls -1 /Library/LaunchAgents/ | grep -iE "microsoft|bing|auto"
ls -1 ~/Library/LaunchAgents/ | grep -iE "microsoft|bing|auto"结果直接命中两个:
/Library/LaunchDaemons/com.microsoft.bing.sunfish.updater.plist # 系统级守护进程
~/Library/LaunchAgents/Microsoft Bing Wallpaper.plist # 用户级启动项注意区分:
/Library/LaunchDaemons/(系统级,需 root)和~/Library/LaunchAgents/(用户级)。 系统级那个,往往就是"删不掉"的根源——因为它以 root 身份运行,权限比你还高。
2. 查 pkg 安装记录
ls -1 /var/db/receipts/ | grep -iE "bing|microsoft"com.microsoft.bing.sunfish.updater.bom
com.microsoft.bing.sunfish.updater.plist
com.microsoft.bing.wallpaper.installer.bom
com.microsoft.bing.wallpaper.installer.plist说明这两样东西当初是通过标准 pkg 安装器装进来的,而且系统里还记着账。
3. 解析这两个 plist,看清它多久跑一次、跑什么
plutil -p "/Library/LaunchDaemons/com.microsoft.bing.sunfish.updater.plist"
plutil -p "$HOME/Library/LaunchAgents/Microsoft Bing Wallpaper.plist"关键字段一目了然:
# 系统守护进程(罪魁祸首)
Label => com.microsoft.bing.sunfish.updater
ProgramArguments => ["/usr/local/bin/sunfish-updater"]
RunAtLoad => true # 开机/登录就跑
StartInterval => 3600 # 每 3600 秒(1 小时)跑一次
UserName => root # 以 root 身份运行
# 用户启动项(帮凶)
Label => Microsoft Bing Wallpaper
ProgramArguments => ["/Applications/Microsoft Bing Wallpaper.app/.../bingwallpaperapp", "--hidden"]
RunAtLoad => true # 登录后把壁纸 App 隐藏自启看到这里基本破案了:sunfish-updater 是个 root 守护进程,每小时执行一次,而 sunfish 是微软内部给 “Bing for Safari” 起的代号。
4. 找到真正的执行体
ls -la /usr/local/bin/ | grep -iE "microsoft|bing|sunfish"-rwxr-xr-x root wheel 11890032 sunfish-updater
-rwxr-xr-x root wheel 956224 sunfish-updater-launchersunfish-updater 是一个 11.8 MB 的编译二进制(Mach-O),不是脚本。它静静躺在 /usr/local/bin/,每小时被守护进程叫起来干坏事。
5. 日志铁证
tail -n 20 "/Library/Logs/Microsoft/Sunfish/Updater/launchd.out.log"日志把"自动重装"写得明明白白:
installer: Package name is Microsoft Bing Wallpaper
installer: Upgrading at base path /
installer: The upgrade was successful.
(重复多次)也就是说,这个守护进程本质上是偷偷调用 macOS 自带的 installer 命令,从缓存的 pkg 把 Bing 应用重新装回去。你手动删 App,删的只是它的"产出物",它下个小时照装不误。
而且日志目录的修改时间是当天 17:54——说明它几个小时前还在勤勤恳恳地帮你"重装"。
6. 安装来源确认
plutil -p /var/db/receipts/com.microsoft.bing.sunfish.updater.plist
plutil -p /var/db/receipts/com.microsoft.bing.wallpaper.installer.plistcom.microsoft.bing.sunfish.updater => InstallDate 2026-08-06, PackageFileName "SunfishUpdater.KYCf1odOzs.pkg"
com.microsoft.bing.wallpaper.installer => InstallDate 2026-08-20, PackageFileName "BingWallpaper-component.pkg"结合时间点判断:最初应该是某次安装 Microsoft Bing Wallpaper 或 Bing for Safari(也可能来自 Microsoft Edge 的 Bing 相关组件)时,安装包顺手塞了这么一个"常驻更新/保活"守护进程。后来卸载 App 时,这个守护进程并没被带走,于是就一直每小时帮你免费重装。
四、根因总结
一句话:不是你手滑,是微软埋了个 root 级后台守护进程,每小时调用系统安装器还原 Bing 应用。
完整链路:
某次安装 Bing 相关组件
↓
写入 root 守护进程 com.microsoft.bing.sunfish.updater
(/Library/LaunchDaemons/...plist + /usr/local/bin/sunfish-updater)
↓
每小时(StartInterval=3600) + 开机(RunAtLoad)
↓
sunfish-updater 调用 installer 从缓存 pkg 重装
Microsoft Bing Wallpaper / Bing for Safari
↓
你手动删 App → 下个周期又被装回 ← 死循环配套残留:
- 系统守护进程 + 二进制:
sunfish-updater、sunfish-updater-launcher - 用户启动项:
Microsoft Bing Wallpaper.plist(登录隐藏自启) - pkg 记录:
com.microsoft.bing.sunfish.updater、com.microsoft.bing.wallpaper.installer - 应用本体:
/Applications/Microsoft Bing Wallpaper.app、/Applications/Microsoft Bing for Safari.app
五、解决思路
要彻底断根,必须连守护进程一起删,只删 App 没用。完整清单:
| 类型 | 路径 | 作用 |
|---|---|---|
| 系统守护进程 | /Library/LaunchDaemons/com.microsoft.bing.sunfish.updater.plist |
每小时重装的根因 |
| 二进制程序 | /usr/local/bin/sunfish-updater、/usr/local/bin/sunfish-updater-launcher |
实际执行重装 |
| 用户启动项 | ~/Library/LaunchAgents/Microsoft Bing Wallpaper.plist |
登录自启壁纸 |
| 应用本体 | /Applications/Microsoft Bing Wallpaper.app、/Applications/Microsoft Bing for Safari.app |
被重装的目标 |
| 安装记录(可选) | /var/db/receipts/com.microsoft.bing.* |
让系统"忘记"装过 |
⚠️ 注意:系统级文件(
/Library、/usr/local/bin)删除需要 sudo(管理员密码)。任何清理操作前请先退掉正在运行的 Bing Wallpaper 程序。
六、一键清理脚本
下面是我整理的清理脚本,特点:
- 带二次确认,避免误删
- 路径全部写死、无通配符,不会误伤其他文件
- 覆盖:停进程 → 卸守护进程 → 删二进制 → 卸用户启动项 → 删应用 → 清除 pkg 记录
- 步骤带编号,跑的时候心里有数
把内容保存为 remove-bing-autoinstall.sh:
#!/bin/bash
# ============================================================
# 清理 Microsoft Bing 自动重装机制 (sunfish-updater)
# 背景:
# 你的 Mac 上有一个 root 级守护进程 com.microsoft.bing.sunfish.updater,
# 每 1 小时调用 macOS installer 把 "Microsoft Bing Wallpaper" / "Bing for Safari"
# 重新装回来。删除应用本体没用,必须连同这个守护进程一起干掉。
# 用法:
# 1) 先手动退出 "Microsoft Bing Wallpaper" 程序
# 2) 终端运行: sudo bash /path/to/remove-bing-autoinstall.sh
# 3) 按提示输入 y 确认
# 4) 跑完建议重启一次
# ============================================================
set -u # 遇到未定义变量直接报错(不用 set -e,避免单步失败中断整体)
echo "=================================================="
echo " Microsoft Bing 自动重装清理脚本"
echo " 将移除: sunfish 守护进程 / 二进制 / 启动项 / 应用"
echo "=================================================="
# ---- 安全检查:必须以 root(sudo) 运行 ----
if [ "$(id -u)" -ne 0 ]; then
echo "❌ 请用 sudo 运行本脚本: sudo bash $0"
exit 1
fi
# ---- 二次确认,防止误删 ----
read -r -p "⚠️ 即将删除 Bing 相关的守护进程、二进制、启动项与应用,确认继续? [y/N] " CONFIRM
if [ "$CONFIRM" != "y" ] && [ "$CONFIRM" != "Y" ]; then
echo "已取消。"
exit 0
fi
# 取得当前登录用户及其家目录(脚本以 root 运行时 $HOME 是 /var/root,不能用)
CURRENT_USER=$(stat -f '%Su' /dev/console 2>/dev/null || echo "$SUDO_USER")
USER_HOME=$(dscl . -read "/Users/$CURRENT_USER" NFSHomeDirectory 2>/dev/null | awk '{print $2}')
[ -z "$USER_HOME" ] && USER_HOME="$HOME"
echo "当前登录用户: $CURRENT_USER (家目录: $USER_HOME)"
# ---------- 1. 终止正在运行的 sunfish 进程 ----------
echo "[1/6] 终止 sunfish-updater 进程..."
sudo pkill -f "sunfish-updater" 2>/dev/null && echo " 已终止" || echo " 无运行进程"
# ---------- 2. 卸载并删除系统级守护进程 ----------
echo "[2/6] 卸载系统守护进程 com.microsoft.bing.sunfish.updater ..."
sudo launchctl bootout system/com.microsoft.bing.sunfish.updater 2>/dev/null || true
sudo launchctl unload /Library/LaunchDaemons/com.microsoft.bing.sunfish.updater.plist 2>/dev/null || true
if [ -f /Library/LaunchDaemons/com.microsoft.bing.sunfish.updater.plist ]; then
sudo rm -f /Library/LaunchDaemons/com.microsoft.bing.sunfish.updater.plist
echo " 已删除 plist"
else
echo " plist 不存在(已删或从未存在)"
fi
# ---------- 3. 删除 sunfish 二进制程序 ----------
echo "[3/6] 删除 /usr/local/bin 下的 sunfish 二进制..."
for bin in /usr/local/bin/sunfish-updater /usr/local/bin/sunfish-updater-launcher; do
if [ -e "$bin" ]; then
sudo rm -f "$bin"
echo " 已删除 $bin"
else
echo " $bin 不存在"
fi
done
# ---------- 4. 卸载并删除用户级 Bing Wallpaper 启动项 ----------
echo "[4/6] 卸载用户启动项 Microsoft Bing Wallpaper ..."
AGENT_PLIST="$USER_HOME/Library/LaunchAgents/Microsoft Bing Wallpaper.plist"
if [ -n "$CURRENT_USER" ]; then
sudo -u "$CURRENT_USER" launchctl unload "$AGENT_PLIST" 2>/dev/null || true
fi
if [ -f "$AGENT_PLIST" ]; then
rm -f "$AGENT_PLIST"
echo " 已删除用户 plist"
else
echo " 用户 plist 不存在"
fi
# ---------- 5. 删除应用本体(仅这两个写死的路径,无通配符) ----------
echo "[5/6] 删除 Bing 应用..."
for app in "/Applications/Microsoft Bing Wallpaper.app" "/Applications/Microsoft Bing for Safari.app"; do
if [ -d "$app" ]; then
sudo rm -rf "$app"
echo " 已删除 $app"
else
echo " $app 不存在"
fi
done
# ---------- 6. 清除 pkg 安装记录(receipts) ----------
echo "[6/6] 清除 pkg 安装记录..."
for pkg in com.microsoft.bing.sunfish.updater com.microsoft.bing.wallpaper.installer; do
sudo pkgutil --forget "$pkg" 2>/dev/null && echo " 已 forget $pkg" || echo " $pkg 无记录"
done
echo "=================================================="
echo " 清理完成!建议重启一次以确认不再自动重装。"
echo " 验证命令: ls /Library/LaunchDaemons/ | grep -i bing (应无输出)"
echo " ls \"$USER_HOME/Library/LaunchAgents/\" | grep -i bing (应无输出)"
echo "=================================================="运行方式
# 先给脚本加执行权限(可选,用 bash 跑也行)
chmod +x remove-bing-autoinstall.sh
# 退出 Bing Wallpaper 程序后,用 sudo 运行
sudo bash remove-bing-autoinstall.sh七、验证与预防
跑完脚本并重启后,用下面两条验证(都应无输出才算干净):
ls /Library/LaunchDaemons/ | grep -i bing
ls ~/Library/LaunchAgents/ | grep -i bing还可以再确认二进制和应用都没了:
ls /usr/local/bin/ | grep -i sunfish # 应无输出
ls /Applications/ | grep -i bing # 应无输出预防建议:
- 以后安装微软系的小工具(Bing Wallpaper、Bing for Safari、甚至某些 Edge 组件)时,多留意安装选项,能不勾"随系统启动/自动更新"就不勾。
- 真要装,装完记得顺手检查
/Library/LaunchDaemons/有没有新增微软相关的 plist——发现sunfish之类名字直接警惕。 - 判断"是不是又回来了",别急着删 App,先回看上面两个目录;只要守护进程没了,它就再也回不来了。
八、结语
这次排查给我最大的感触是:在 macOS 上,删 App ≠ 卸载干净。App 只是表象,真正决定它"会不会复活"的,是那些藏在 /Library/LaunchDaemons、/usr/local/bin 里的守护进程和二进制。遇到"删了又来"的软件,别跟 App 较劲,去查启动项和日志,根因往往一目了然。
希望这篇能帮到同样被 Bing “阴魂不散"折磨过的你。如果排查到其他有趣的"自动复活"案例,也欢迎交流。
本文所有命令均已在 macOS 上实测,清理前请务必确认路径、做好备份。操作涉及系统目录,请谨慎执行。