文件快捷方式

在计算机领域，**捷徑**是一种用户界面中的句柄，它允许用户找到或使用位于另一个目录或文件夹的一个文件或资源。

快捷方式通常被实现为一个包含目标URI或GUID的小文件，以此指向一个对象或快捷方式所代表的目标程序文件。快捷方式还可能额外指定命令行参数，从而在运行它时将所定参数传递到目标程序。每个快捷方式都有其自身的图标。快捷方式最常见的地方就是桌面，以及应用启动面板（例如Microsoft Windows开始菜单）或桌面环境的主菜单。在麦金塔（Macintosh）操作系统中等效的功能被称为“别名”，在类UNIX系统中则有符号链接可用。

## 实现

### Microsoft Windows

文件快捷方式是在Windows 95中被引入。Microsoft Windows使用`.lnk`作为本地文件快捷方式的文件扩展名，使用`.url`作为远程文件（例如远端网页）快捷方式的文件扩展名。默认情况下，一个箭头会覆盖图标以标识性质，并且快捷方式不显示文件扩展名（扩展名在Windows资源管理器中会始终隐藏，即便在“文件类型”选项中取消选中“隐藏已知文件类型的扩展名”也不会显示。它由`NeverShowExt`选项控制，位于注册表的 `HKEY_CLASSES_ROOT\lnkfile`。`IsShortcut`选项则控制显示箭头）。快捷方式文件可以以最小化或最大化的窗口状态启动程序，只要那个程序支持该窗口状态。

Microsoft Windows的`.lnk`文件是作为Windows Explorer的扩展，而不是文件系统的扩展。作为外壳扩展，`.lnk`文件只能在Windows Explorer中指向文件，不過除了作為本機檔案（或 GUID）的快捷方式之外，在Windows Explorer中還有其他用途，例如：`.lnk`可以附加執行檔的後設資料，包括目標應用程式的原始路徑；或是用於連結到特定的內容，例如打開特定的網頁或執行特定的命令，駭客可能會藉此下載惡意軟體，或是執行惡意腳本。

虽然快捷方式被创建时指向了特定文件或文件夹，但如果目标被移动到其他位置，快捷方式会因此损坏。当打开一个目标不存在的快捷方式时，Explorer将尝试修复该快捷方式。Windows 9x的Windows用一个简单的搜索算法来修复损坏的快捷方式。在以Windows NT为基础的操作系统且NTFS的文件系统中，目标对象的唯一标识符会存储在快捷方式中，并且Windows可以使用“Distributed Link Tracking”服务跟踪快捷方式的目标，因此在快捷方式的目标被移动到另一个驱动器时，快捷方式的目标可以被静默更新。Windows 2000中引入的Windows Installer带来了另一种特殊类型的快捷方式，被称为Advertised shortcuts。

Windows中的文件快捷方式可以存储一个不同于目标路径的工作目錄，其中可以使用环境变量。在快捷方式的属性中还可定义一个快捷键，但生效前提是快捷方式位于开始选单文件夹、任务栏固定的图标，或者放在桌面。从Windows 2000起，文件快捷方式可以存储备注，备注将在鼠标悬停在该快捷方式上时显示。

一般来说，双击快捷方式的效果与双击所指向的应用程序或文档的效果相同，但Windows的快捷方式包含独立的目标和“起始”目录。如果使用未输入“起始目录”的快捷方式，某些应用程序可能会产生“缺少DLL”错误。

在Windows Vista及更高的系统中可创建文件系统链接，这提供类似符号链接的功能，但它是文件系统的一个特性。Windows的快捷方式是独立于文件系统的文件，通过Explorer生效。

从Windows 7开始，一些快捷方式还存储“应用程序用户模型ID”（AppUserModelID）。不同于目标命令行，AppUserModelIDs可以用来直接启动应用程序。AppUserModelID被某些桌面程序和所有WinRT模型的应用程序用于启动。

尽管Windows未提供方便的工具来创建，但Explorer支持“文件夹链接”和“外壳链接文件夹”：一个设为“系统”属性的文件夹，包含隐藏的“desktop.ini”（文件夹定制）文件，告知Explorer查找同目录下的“target.lnk”文件，它指向另一个文件夹。当在Explorer中查看时，外壳链接文件夹会呈现目标文件夹的内容——也就是说，定制后的文件夹变成了一个快捷方式。此技术被微软Windows用于如WebDAV文件夹的项目。不过，Windows Vista及更高版本中提供的“文件系统链接”使“外壳链接文件夹”不再那么实用。

### Unix

某些面向类Unix操作系统的桌面环境（如GNOME、KDE）提供freedesktop.org `.desktop`文件。这可以用来指向本地或远程文件、文件夹和应用程序。在Unix系统上也可以创建符号链接，能做到类似的功能。

#### 支持桌面快捷方式的X窗口管理器的列表
下面是部分支持在桌面上使用快捷方式图标的窗口管理器：
* 4Dwm
* 
* cwm
* dwm
*  
* 
* 
* 
* KWin
* Metacity
* Window Maker

### Mac
虽然在Unix子系统中可以创建符号链接，麦金塔（Macintosh）没有对快捷方式的扩展。扩展名.webloc被用于Safari浏览器中的互联网URL。Macintosh System 7至Mac OS 9中的“”采用使用斜体文件名标识以区分。在Mac OS 8及之后的版本中则添加了一个称为“替身箭头”的标识，它是一个在白色小正方形上的黑色箭头，类似Microsoft Windows中的快捷方式。在Mac OS X中，替身的文件名不会被斜体，但仍有箭头标识。此外，替身会保留到对象的动态引用，并且即使在远程服务器上调用文件时也不需要指定替身。

## 历史
要在早期的图形用户界面中执行一个应用程序或呈现一个電腦檔案，用户必须点击点击文件的实际所在位置，例如应用程序的可执行文件。将执行一个与可执行文件相关联的指令的图标与该文件本身分离的概念使得图标可以按照功能或任务而不是文件存放的物理结构来分组。这种概念最早在1991年金士頓大學出版的研究论文“窗口化图形用户界面的面向任务前端”中描述，并在同年根据学术/商业技术共享协议下提供给微软和Xerox EuroPARC。这项研究的简化形式在1991年被并入System 7，在四年后被并入Windows 95。

## 参见
* NTFS符号链接
* 硬链接
* 

## 参考资料

## 外部链接
* ["Shell Link (.LNK) Binary File Format"](http://msdn.microsoft.com/en-us/library/dd871305(v=prot.13).aspx)  from Microsoft（[旧版本](http://msdn.microsoft.com/en-us/library/dd871305(PROT.10).aspx) ）
* IShellLink interface for accessing .lnk files in the Windows API
* "Shellify"  Shellify is a 100% managed .NET implementation of the Microsoft Shell Link (.LNK) Binary File Format for accessing .lnk files without the Windows API
* Perl library