从ColdFusion访问映射的网络驱动器

6

我在使用ColdFusion时遇到了访问映射驱动器的问题。我已将\\server\files\sharing映射到z:\。如果我运行此代码,则会显示完整路径下的目录存在,但映射路径下的目录不存在:

<cfscript>
  fullPath = "\\server\files\sharing\reports";
  mappedPath = "z:\reports";

  WriteOutput("fullPath exists: #DirectoryExists(fullPath)#<br/>"); //YES
  WriteOutput("mappedPath exists: #DirectoryExists(mappedPath)#");  //NO
</cfscript>

我已经搜索了一些资料,发现有几个人遇到了相同的问题,但解决方法总是使用完整路径。ColdFusion无法看到或访问映射的驱动器是否有原因?如果有,是否有任何解决方法(也许可以通过系统调用获取映射驱动器的完整路径)?


@AlEverett:它正在作为系统服务运行。任务管理器显示为“SYSTEM”。 - Kip
2
这很可能是问题所在。我在使用 CF 访问驱动器时遇到的所有麻烦都是因为 "SYSTEM" 对驱动器资源的访问权限非常有限。您需要将其作为具有该驱动器/目录访问权限的用户运行。 - ale
@AlEverett:但如果我使用完全限定名(即 \server\dir),系统就可以访问它。只有映射的驱动器会失败,我以为它只是一个别名。(也许我在映射网络路径到驱动器字母的工作原理方面缺少某些基本知识...) - Kip
好的,但是当您尝试Al的建议(即在映射驱动器的同一用户帐户下运行CF)时,结果如何? - Leigh
艾尔和本都是正确的。我认为映射驱动器属于创建它们的用户。如果你让CF应用服务器以该用户身份运行,访问映射驱动器应该可以正常工作。否则,你可能需要坚持使用“\server\dir”语法。 - Joe D
显示剩余2条评论
1个回答

5
ColdFusion无法访问映射的驱动器的原因是它在Windows中以服务方式运行。任何必须访问远程资源的服务(或在不同安全上下文中运行的任何进程)都应使用通用命名约定(UNC)名称来访问该资源。这是从以下知识库文章中提取的:http://support.microsoft.com/kb/180362。您可以将服务更改为以拥有映射驱动器的个人用户身份运行(我没有检查过是否有效,但可能会),但您应该使用UNC路径而不是映射的驱动器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接