当快捷方式“深不可测”:Advertised Shortcuts

🌀 当快捷方式“深不可测”:Advertised Shortcuts

有没有遇到过这种情况?右键 .lnk → 属性 → 快捷方式,结果“目标”一栏灰掉,只写着一个应用名(还不能改),连“打开文件所在的位置”也点不了 😶。像 Topaz Video AI 那样的例子其实很典型——你碰到的是一种特殊的快捷方式:Advertised Shortcut

Advertised Shortcut 示例

💡 1)它到底是什么?

Advertised Shortcut 是由 Windows Installer(MSI) 创建并托管的快捷方式。
它不是直接指向某个 exe 路径,而是指向 MSI 产品或功能(Feature)描述

当你点击它时,Windows Installer 会先检查关键组件是否完好,如果缺失,就自动触发修复或补装(这就是所谓的 self-healing 自修复)。
所以你偶尔会看到“正在准备安装/配置”的提示,就是这个机制在起作用 ⚙️。

更深入一点:这类快捷方式内部包含一个叫 Darwin Descriptor(达尔文描述符) 的东西,用来把快捷方式和 MSI 的产品/功能绑定。
因此它不像普通 .lnk 那样直接存储文件路径。


🎯 2)它为什么要这么设计?

核心目的有两个:

  • 🔧 自修复:如果关键文件被误删或被安全软件隔离,下一次从快捷方式启动时会自动修复缺失组件。
  • 📦 按需安装:部分功能标记为“首次使用时才安装”,快捷方式能在你点击时再触发安装(依靠 MSI 的 Feature/Component 机制)。

👀 3)怎么一眼认出它?

几个稳定的“体征”:

  1. “目标”灰掉,仅显示应用名,且不可编辑
  2. “打开文件所在的位置”灰掉不可点;
  3. 常见于由套件或企业部署的 MSI 安装环境。

这些并不是快捷方式损坏的表现,而是 MSI 自身托管机制的结果。
当“目标框被禁用”,几乎可以确定这是 Advertised Shortcut


🔍 4)真实的 exe 在哪?怎么找到?

因为属性里不给路径,我们可以“反查”运行中的进程 👇

📋 方法:任务管理器 → 详细信息

  1. 通过该快捷方式启动程序;
  2. 打开 任务管理器 → 详细信息
  3. 右键表头 → 选择列 → 勾选 “映像路径名(Image Path Name)”“命令行”
  4. 就能看到正在运行的可执行文件的完整路径 🕵️‍♂️。

这个方法对绝大多数 Advertised Shortcut 都管用。
如果应用有额外的 Loader/Launcher,查看“命令行”列可以进一步确认真正的 exe


🔄 5)能把它改成“普通快捷方式”吗?

可以,但要看你希望怎么用:

🧍‍♂️ A. 个人使用:自己建一个普通 .lnk

  1. 按上面的方法找出真正的 exe
  2. 在桌面空白处右键 → 新建 → 快捷方式
  3. 目标直接填入 exe 的绝对路径(有启动参数可加上)。

这样创建的快捷方式不再触发 MSI 自修复,也能正常打开文件所在位置。

⚠️ 代价:失去了自修复/按需安装的保护。若文件缺失,程序可能直接报错而不会修复。


🧰 B. 从安装层面禁用 advertised

如果你能控制安装包或部署行为,可在安装时加入:

1
DISABLEADVTSHORTCUTS=1

这样安装器会创建非广告式快捷方式。
部分打包工具(如企业部署环境或 WiX、Advanced Installer)也提供对应开关。

⚠️ 注意:这改的是安装行为,不是现有 .lnk 的属性。


🏗️ 6)这类快捷方式是怎么“被造出来”的?

在 MSI 数据库中,**Shortcut 表(Shortcut Table)**记录了快捷方式信息。
其中是否为广告式,取决于目标字段与 Feature/Component 的绑定关系。
当系统支持时,安装器就会生成 advertised 版本。

在企业打包或自动部署时(如 WiX、Advanced Installer),这类配置非常常见 🧱。


⚖️ 7)优缺点一览

优点:

  • 🛠️ 自动自修复关键文件,减少“用户删错文件后应用崩溃”的风险;
  • 🚀 支持按需安装,减小初始安装体积与时间。

缺点:

  • ❌ 属性页中“目标/打开文件位置”常为灰色,不易扩展;
  • 🎯 某些交互(如拖文件到快捷方式上打开)可能失效;
  • 🔄 偶尔弹出“正在配置/修复”的对话框,体验略有割裂感。