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

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

作为一个例子,我已经softlinked和hardlinked相同的CSS文件:

$ 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 

软硬联系

硬链接的行为是可预测的(与原始文件无法区分),但我不了解软链接。 看看这个例子:

在这里输入图像说明

而且,当插入符号编辑器使用CSS时,硬链接的样式表工作正常:

在这里输入图像说明

而softlinked被打破了:

在这里输入图像说明

问题是:

  1. 符号链接如何在Windows上实际运行?
  2. 软链接可以透明的应用程序? 通过透明,我的意思是应用程序将始终将文件看作符号链接path( ...\symlinked.css ),永远不会parsing到原始path( ...\Default.css )。 有没有一些Windowsregistry设置什么的?

对于使用底层文件系统的应用程序,例如CreateFile()和朋友,符号链接是透明的,除非应用程序特别注意这些文件。

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

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

所以你的前两个例子(Explorer显示文件的方式和Notepad ++的行为)是功能而不是bug; 喜欢与否,这是Windows设计工作的方式。

您的最后一个例子在相关的应用程序中看起来似乎是一个错误(或者至多是不合需要的设计限制)。 这可能是值得与供应商联系。


您还应该意识到,创建符号链接需要管理权限,并且默认情况下,它们不能在网络共享上运行。 就个人而言,鉴于所有这些限制,我从来没有发现它们非常有用。 对于大多数用户任务,我会使用快捷方式,而对于大多数系统管理任务交接点更可靠。

他们应该对大多数应用程序是透明的,但一些应用程序是为了自己的利益而灵活的。

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

在您的具体情况下,我猜测高级编辑器应该在打开的对话框中使用FOS_NODEREFERENCELINKS 。 CSS切换器可能正在使用FILE_FLAG_OPEN_REPARSE_POINT ,您应该能够使用进程监视器来验证。

没有神奇的注册表项可以使用,你必须联系应用程序的作者。

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

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

当你创建一个软链接时,你不是指向一个节点,而是指向一个文件。 由于该软链接解决了它指向文件的路径。

由于符号链接包含它自己的路径和路径,所以它指向真正取决于应用程序开发人员选择他们想要在其UI中放置哪个路径。