将文件从一个服务器路径复制到另一个显示访问被拒绝

Posted

技术标签:

【中文标题】将文件从一个服务器路径复制到另一个显示访问被拒绝【英文标题】:Copy file from one server path to another showing access denied 【发布时间】:2019-12-19 20:38:22 【问题描述】:

,尽管我已授予完全访问权限。

Error:System.UnauthorizedAccessException: 访问路径是 否认。在 System.IO.__Error.WinIOError(Int32 错误代码,字符串 MaybeFullPath) 在 System.IO.File.InternalMove(String sourceFileName, String destFileName, Boolean checkHost)

我已尝试授予对所需文件夹的安全访问权限

string sourceFile = "C:/inetpub/wwwroot/MATS_History_Load_App/Python_Scripts/MATSUpgrade.xlsx";

string destinationFile = "//192.xxx.47/Mats/mats_test/MATSUpgrade.xlsx";

// To move a file or folder to a new location:
System.IO.File.Move(sourceFile, destinationFile);

重要提示:应用程序托管在 IIS 上

【问题讨论】:

请在问题中添加一些帮助信息,例如托管环境! 【参考方案1】:

假设您的代码进程的身份没有访问问题:

这个开箱即用效果很好,尝试用反斜杠替换斜杠并在路径字符串之前使用@

string sourceFile = @"C:\temp\test.txt";
string destinationFile = @"\\fileshare\users\xy\prime.txt";
System.IO.File.Move(sourceFile, destinationFile);

否则在服务或网络托管场景中,您需要考虑执行身份的访问权限:

https://support.microsoft.com/en-us/help/207671/how-to-access-network-files-from-iis-applications

【讨论】:

还尝试将网络共享映射到 Windows 盘符,并复制到该盘符路径,如果行为不同的话。 @Trendycuz 您的代码是否托管在 IIS 或其他 Web 主机/服务上,因此使用您以外的帐户执行?检查 IUSR / IIS_IUSRS / WAS / 网络服务帐户。 它通过 IIS_IUSRS 托管在 IIS 上 @Trendycuz 这个信息非常重要,它在问题中丢失了。这当然意味着托管进程的所有者/身份需要访问网络共享。有大量关于这个常见问题的信息,要么使用另一个身份运行,要么使用授权,这可能更具挑战性。 support.microsoft.com/en-us/help/207671/…【参考方案2】:

据我所知,如果您想修改或访问网络共享文件夹。您应该确保首先选择了正确的应用程序池身份权限。如果您使用网络服务帐户作为身份,您仍然需要在共享文件夹上添加足够的权限,因为网络服务和本地系统都以计算机帐户(DOMAIN\computer$)出现在网络上。

通常,我们会选择网络服务。

详情,可参考以下步骤:

1.打开IIS管理控制台,选择合适的应用程序池,点击高级设置。

2.选择身份,修改账号为networkservice

3.右击电脑,点击属性,你会看到你的电脑名称如下:

4.转到您的共享文件夹服务器,右键单击该文件夹并单击属性。然后你可以像这样 (Domain\Servername$) 将你的服务器帐户添加到它

【讨论】:

以上是关于将文件从一个服务器路径复制到另一个显示访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

无法复制文件 - 访问路径被拒绝

未经授权的访问异常 - 在C#中将文件复制到其他目录时访问被拒绝的路径

为啥从目录执行 ssis 包时访问文件路径被拒绝消息

无法将文件 obj\Debug 复制到 bin\Debug 对路径 bin\Debug\ 的访问被拒绝

对路径“binMySql.Data.xml”的访问被拒绝的解决方法

无法复制文件。访问路径被拒绝