C# 在使用符号链接映射的网络共享上创建子目录

C# 在使用符号链接映射的网络共享上创建子目录,c#,windows,subdirectory,symlink,C#,Windows,Subdirectory,Symlink,我们有两台服务器,我们称它们为Server1和Server2。Server1是我们的数据库服务器,Server2是运行.NET 4.5 web app的应用程序服务器 Server1上的文件夹创建为: C:\SomeFolder\SubFolder 该文件夹已被共享,并且“每个人”都有权“完全访问”该文件夹,包括共享权限 同一文件夹作为符号链接()映射到Server2: 现在我可以浏览: c:\inetpub\wwwroot\App\App\u Data\SubFolder 像往常一样使用文件资

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

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

该文件夹已被共享,并且“每个人”都有权“完全访问”该文件夹,包括共享权限

同一文件夹作为符号链接()映射到Server2:

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

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

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

这同样会产生一个错误:

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上的应用程序池标识设置为Server2上的“administrator”帐户,但仍然收到相同的错误

但是,使用相同的管理员帐户和使用文件资源管理器创建子目录和文件对Server2进行RDPing是可行的

有人能帮助您使用C#/code创建子文件夹/文件吗?

面向后代:


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

尝试创建level2时level1是否已经存在?此路径
C:\inetpub\wwwroot\Transportation\App\u Data\Backups\2020\01\04\11
来自何处?@Milney Nopes。但是CreateDirectory发布它可以创建嵌套的子文件夹:@PavelAnikhouski请忽略。我更新了问题。该路径是我们系统中的实际路径,而我在问题中使用了示例目录路径。@Milney请添加您的注释作为答案,以便我可以接受它为正确的路径。我尝试在所有级别(即Level1和Level2)手动创建树中的目录,结果成功了。看起来.NET无法确定在这种情况下要创建的目录结构。请将措辞从“连接”更改为“符号链接”。问题可能是因为符号链接目标是UNC路径,尽管原因尚不清楚。连接是在服务器上进行评估的装载点,因此它们不能以远程路径为目标,因为委托访问问题通常很难解决。这里使用符号链接是因为它们总是在客户端进行评估。(符号链接并不总是更好。有时装载点是更好的选择,或者是唯一的选择,例如,指向本地驱动器上目录的远程可访问链接,但符号链接不可能。)
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)