【问题标题】:Creating a sub-directory on a network share mapped using symbolic link在使用符号链接映射的网络共享上创建子目录
【发布时间】:2020-04-22 17:17:31
【问题描述】:

我们有 2 台服务器,我们称它们为 Server1 和 Server2。 Server1 是我们的数据库服务器,Server2 是我们运行 .NET 4.5 Web 应用程序的应用程序服务器。

Server1 上的文件夹创建为: C:\SomeFolder\SubFolder

相同的内容已被共享,并且“所有人”被授予对该文件夹的“完全访问权限”,包括共享权限。

同一文件夹作为符号链接映射到 Server2 (https://superuser.com/a/244572):

mklink /d "c:\inetpub\wwwroot\App\App_Data\SubFolder" "\\Server1\SubFolder\"

现在我可以浏览: c:\inetpub\wwwroot\App\App_Data\SubFolder

像往常一样使用文件资源管理器。我可以按预期创建出现在 Server1 上的文件和子文件夹。

但是,当我尝试使用我的 C# Web 应用程序创建子目录时:

System.IO.Directory.CreateDirectory(@"c:\inetpub\wwwroot\App\App_Data\SubFolder\Level1\Level2");

同样报错:

Access to the path 'C:\inetpub\wwwroot\App\App_Data\SubFolder\Level1\Level2' is denied.
System.UnauthorizedAccessException: Access to the path 'C:\inetpub\wwwroot\App\App_Data\SubFolder\Level1\Level2' is denied.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.Directory.InternalCreateDirectory(String fullPath, String path, Object dirSecurityObj, Boolean checkHost)
   at System.IO.Directory.InternalCreateDirectoryHelper(String path, Boolean checkHost)

我已经检查了一切。我将 Server2 上的应用程序池标识设置为 LocalSystem,得到了同样的错误。我将 Server2 上的应用程序池标识设置为 Server 2 上的“管理员”帐户,仍然出现相同的错误。

但是,使用相同的管理员帐户和使用文件资源管理器创建子目录和文件的 RDPing 到 Server2 工作正常。

有人可以协助如何使用 C#/代码创建子文件夹/文件吗?

【问题讨论】:

  • 当你尝试创建 level2 时 level1 是否已经存在?
  • 这条路径C:\inetpub\wwwroot\Transportation\App_Data\Backups\2020\01\04\11从何而来?
  • @Milney Nopes。但是 CreateDirectory 发布它可以创建嵌套子文件夹:docs.microsoft.com/en-us/dotnet/api/…
  • @PavelAnikhouski 请忽略。我更新了问题。该路径是我们系统中的实际路径,而我在问题中使用了示例目录路径。
  • @Milney 请添加您的评论作为答案,以便我接受它作为正确的答案。我尝试在所有级别(即 Level1 和 Level2)的树中手动创建目录并且它有效。看起来 .NET 无法确定在这种情况下要创建的目录结构。

标签: c# windows subdirectory symlink


【解决方案1】:

为了后代:

当您尝试创建 level1\level2 文件夹时,值得检查 level1 文件夹是否已经存在。虽然文档建议它将创建所有到底层的路径,但在使用网络资源和联结时,API 可能有点粗略 - 尝试先创建 level1 文件夹,然后创建 level2 文件夹。

【讨论】:

  • 将措辞从“junctions”更改为“symlinks”。这个问题虽然不清楚原因,但可能是因为符号链接目标是 UNC 路径。连接点是在服务器上评估的挂载点,因此它们不能针对远程路径,因为委托访问问题通常难以解决。在这里使用符号链接是因为它们总是在客户端进行评估。 (符号链接并不总是更好。有时挂载点是更好的选择 - 或者是唯一的选择,例如,以本地驱动器上的目录为目标的远程可访问链接 - 使用符号链接是不可能的。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-05
  • 2010-09-21
  • 2014-06-25
  • 2020-12-23
  • 1970-01-01
  • 2023-03-14
  • 2018-11-22
相关资源
最近更新 更多