继上一个问题之后,我正在使用UNC路径从Vista机器上创建Server 2008上的符号链接.我可以创建链接就好了.我可以转到Server 2008框并双击资源管理器中的链接以打开目标文件.但我不能做的是使用FileCreateW来获取UNC路径链接的句柄(来自Vista框).当我尝试它时,它失败并且GetLastError()返回错误代码1463(0x5B7),这是:
无法遵循符号链接,因为其类型已禁用.
如何在Server 2008中启用其"类型"(假设错误意味着它所说的)?
好吧,我找到了答案,虽然将其描述为严重记录是轻描淡写!
首先,这篇TechEd文章强调了用户可以"启用或禁用符号链接中可用的四种评估中的任何一种"的事实.这四个"评估"包括远程本地和本地到远程.它没有提供任何关于如何做到这一点的线索.
然而,进一步的搜索显示了这个fsutil帮助页面,它确实记录了如何"启用或禁用符号链接中可用的四个评估中的任何一个".所以为了解决我遇到的问题,我需要在Vista框上发出以下命令:
fsutil behavior set SymlinkEvaluation L2L:1 R2R:1 L2R:1 R2L:1
为了允许完全访问符号链接指向本地和远程计算机的位置.
要添加到@David Arno的有用答案,基于W7:
fsutil.exe
可以通过简单地运行来显示它需要的参数:
fsutil behavior set /?
要报告当前配置,请运行fsutil behavior query SymlinkEvaluation
- 请参阅@Jake1164的答案,特别是关于组策略如何控制行为.
该符号链接解析行为被设置在机器上访问给定链路,没有承载它的机器.
该行为规范的fsutil behavior set SymlinkEvaluation
-即L2L
,L2R
,R2L
,和R2R
-的含义如下:
L
代表"本地",R
代表"远程"(谁会砰的?)
第一L
或R
- 之前的2
-是指链接本身(而不是与它的靶)的位置相对于机器访问链接.
第二L
或R
- 之后的2
-指的是链接的位置目标相对到链接本身所在的机器.
因此,例如,执行fsutil behavior set SymlinkEvaluation R2L
意味着您可以访问链接:
位于远程机器上(R
)
指向同一台远程机器上的目标(L
)
与David在Vista上遇到的不同,我在W7上能够通过单独启用R2R(而不是还必须启用R2L)来解析指向另一台远程计算机上的资源的远程链接.
当我的一个遗留程序停止工作时,我最近在所有公司的Windows 7盒子上发现了这个.经过一些搜索和查找这些设置后,我尝试通过命令行设置并通过注册表进行设置,没有任何解脱.
我发现您可以从提升的提示中使用该命令:
fsutil behavior query SymlinkEvaluation
这将返回这些链接的状态,在我的情况下,它们是由组策略控制的!谢谢IT部门(你f @ $#%$ rs)!
也可以通过HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem中的注册表直接操作这些设置:请参阅SymlinkLocalToLocalEvaluation,SymlinkLocalToRemoteEvaluation,SymlinkRemoteToLocalEvaluation,SymlinkRemoteToRemoteEvaluation.
如果使用"fsutil behavior query SymlinkEvaluation",则会收到消息.." 当前由组策略控制 "...,检查HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Filesystems\NTFS 或只是搜索throug注册表中的"Symlink"
感谢大卫的提示,我迫切希望解决这个问题,这使得符号链接大多无用.
需要注意的是,Vista的默认配置是L2L和L2R启用,但R2R和R2L禁用.
我首先尝试只启用R2R,但这还不够.R2L也必须启用.
我的列表中的下一个问题:如何摆脱目录链接的mklink命令的愚蠢/ D开关.应从目标路径名类型自动推断默认链接类型!