应用程序如何处理Windows符号链接?

时间:2017-03-29 10:13:18

标签: windows symlink mklink

我认为Windows 10中的符号链接与Linux符号链接的行为类似,即它们对应用程序是透明的。但是,我对实际行为感到困惑。

作为一个例子,我已经软链接和硬链接相同的CSS文件:

BYMONTH

soft and hard link

硬链接行为可预测(与原始文件无法区分)但我不理解软链接。例如,见:

enter image description here

此外,当Caret编辑器使用CSS时,硬链接样式表可以正常工作:

enter image description here

虽然软关联被破坏了:

enter image description here

问题是:

  1. 符号链接在Windows上的实际行为如何?
  2. 软链接可以对应用程序透明吗?透明,我的意思是应用程序总是会看到文件位于符号链接路径($ mklink softlinked.css Default.css symbolic link created for softlinked.css <<===>> Default.css $ mklink /H hardlinked.css Default.css Hardlink created for hardlinked.css <<===>> Default.css )上,并且永远不会解析为原始路径(...\symlinked.css)。是否有一些Windows注册表设置或什么?

3 个答案:

答案 0 :(得分:3)

符号链接对使用底层文件系统的应用程序是透明的,例如,CreateFile()和朋友,除非应用程序特别努力了解它们。

但是,对于使用shell命名空间的应用程序(例如标准的“打开文件”对话框),它们透明,因为shell将符号链接视为快捷方式,甚至可以修改显示的图标。对于微软来说,这是否是一个明智的决定,在这个阶段是一个有争议的问题,因为它不会发生变化。据我所知,它是不可配置的。

实际上,这通常意味着符号链接将对GUI应用程序中的非GUI应用程序和内部文件(DLL,内置模板,配置文件等)透明地运行,但对于用户的文档则不行。

所以你的前两个例子(资源管理器显示文件和Notepad ++的行为)是功能而不是错误;无论喜欢与否,这都是Windows的工作方式。

您的上一个示例似乎确实是相关应用程序中的错误(或充其量是一个不受欢迎的设计限制)。可能值得联系供应商。

您还应该知道,创建符号链接需要管理权限,默认情况下,他们不会在网络共享中工作。就个人而言,鉴于所有这些限制,我从未发现它们非常有用。对于大多数用户任务,我会使用快捷方式,对于大多数系统管理任务,连接点更可靠。

答案 1 :(得分:2)

它们应该对大多数应用程序都是透明的,但有些应用程序会为了自己的利益而聪明。

他们可能会将FILE_FLAG_OPEN_REPARSE_POINT传递给CreateFile,或者在“验证”文件属性并在FILE_ATTRIBUTE_REPARSE_POINT上阻塞时过于激进。

在您的具体情况下,我猜测高级编辑器应在其打开的对话框中使用FOS_NODEREFERENCELINKS。 CSS切换器可能正在使用FILE_FLAG_OPEN_REPARSE_POINT,您应该可以使用Process monitor验证该内容。

您无法使用神奇的注册表项,您必须联系应用程序作者。

答案 2 :(得分:1)

文件是指向某个节点的指针。

创建硬链接时,您只需创建一个指向与原始文件相同节点的新文件。

创建软链接时,您不是指向节点,而是指向文件。由于该软链接解析了它指向的文件的路径。

由于符号链接包含它自己的路径和路径,它指向它实际上取决于应用程序开发人员选择他们想要放入UI的路径。