为什么更高版本的 Windows 继续使用快捷方式文件而不是符号链接?

Ale*_*lex 69 windows links

Windows XP 及更高版本支持符号链接。然而,Windows 继续使用快捷方式文件(本质上将链接文件的位置存储为文本)。为什么?

Jon*_*nno 107

大概有几个原因

  1. 您可以针对相同 EXE 的多个不同快捷方式存储不同级别的兼容性,因为它们由外壳程序而不是文件系统解释。
  2. 某些快捷链接实际上并不存在于文件系统中。其中一些只是对 GUID 或 shell 解释的特殊字符串的引用。
  3. 您不能在符号链接中包含开关。您可以指向 EXE,当然,但您不能告诉 EXE 任何进一步的参数。
  4. 您不能为符号链接选择图标。
  5. 您无法在符号链接中选择要从哪个目录工作。
  6. 快捷方式文件不仅必须指向文件,还可以是超链接或协议链接(如果是 .URL 文件)。
  7. LNK 文件可以存在于任何文件系统上。符号链接由文件系统本身处理,在 Windows、NTFS 的情况下。
  8. 没有真正需要更换它们。它们可以工作,它们很小,如果需要向它们添加比上面列出的更多功能,它们可以在未来扩展。
  9. 创建符号链接需要管理权限(有充分的理由 - 否则只需很少的工作就可以将无辜文件重定向到恶意文件)

将有比这更多的原因,但我认为这是足以让你开始:) -还有由@grawity提供的链接在这里,这将使有关这个主题的部分一些进一步的阅读。

  • @grawity 将这些转移到由文件系统处理有什么主要好处吗?如果需要,我会认为 .lnk 文件有无限的扩展空间来扩展更多功能,同时仍然保持向后兼容性,并且它们没有太多开销。将它移动到文件系统会有点过度设计,也许?不过,我绝不是文件系统内部工作方面的专家。 (5认同)
  • 确实,FS 本身对大部分信息没有用处——许多 .lnk 功能实际上是特定于资源管理器的,因此将所有内容存储为重新分析点而不是文件将是过度的。 (3认同)
  • 只是想指出,据我所知,LNK 文件不能用于定位 URL(超链接)。您可以在 Windows 中使用相同的快捷方式创建工具来创建 URL 的快捷方式,但最终结果是一个 .URL 文件(它是纯文本,本质上是一个 INI 文件),而不是一个 .LNK 文件(它是二进制文件)。 (3认同)
  • 或者 `start http://superuser.com` 选择默认浏览器,就像一个真正的 URL 快捷方式一样。也就是说,您 ** 可以** 使 .LNK 文件指向 URL。最后,它们是“序列化的 COM 名字对象”,并且可以使用新的名字对象类型扩展 COM 系统。 (3认同)
  • 此外,文件快捷方式会缓存有关目标的某些元数据,并且在 shell 级别解释允许快捷方式由 shell _更新_如果目标已移动,这将更难使用符号链接。一般而言,有关快捷功能的各种有趣内容,请参见 [旧的新事物](https://www.google.com/search?ie=UTF-8&q=site%3Ablogs.msdn.com%2Fb%2Foldnewthing%20shortcut) . (2认同)

Kev*_*vin 6

符号链接只不过是包裹在极少量文件系统魔法中的路径。它可以通过多种方式变为无效(“损坏”),其中大多数涉及一个或多个文件或目录被重命名。由于 Windows 是消费者软件,您可能会在“典型”安装上运行大量设计非常糟糕的程序。因此,与服务器上(理论上)接触磁盘的每个程序都是已知数量的服务器相比,这种损坏更难避免。

快捷方式不受大多数​​形式的破坏影响,因为它们独立于路径跟踪目标。这使它们更加用户友好。它们专为消费者设计,采用“按我的意思做,不要打扰我细节”的方法。

现在,您可以为此使用硬链接(在某种程度上),但硬链接具有许多复杂的属性,这使得它们不适合消费者使用。特别是,文件非常容易获得新的 inode 编号,并且一些备份软件在遇到硬链接时会崩溃得相当厉害。前者可以(也许)通过文件系统隧道解决(这实际上是快捷方式解决相关问题的方式),但后者是一个更难的问题。

(我可能还应该注意到,使用隧道“解决”硬链接绝对是一件非常重要的事情,因为这不仅仅是重新附加“丢失”的元数据的问题。inode 绑定在磁盘分配方案中,因此您不能随意合并或者事后重新分配它们,而无需大量跑腿。由于快捷方式使用其他可以轻松隧道传输的元数据,例如创建时间,因此它们没有这个问题。)