IIS 拒绝访问路径
Access to path denied on IIS
我正在尝试让我的 MVC 应用程序使用 System.IO.File.WriteAllText
将一个简单的文本文件写入另一台服务器。 (一个单独的进程正在该文件夹中查找要抓取的文本文件。)在我的本地机器上调试时它工作正常,但是当部署到测试服务器上的 IIS 时,我在尝试写入文件时总是遇到此错误:
Access to the path '\server\C$\folder\subfolder\file.txt' is denied.
SO 上至少六个类似问题的答案是授予应用程序池身份帐户访问该文件夹的权限。但是,IIS 上的应用程序池已经 运行 在一个对所需文件夹具有完全权限的服务帐户下,但仍然出现错误。我什至尝试将应用程序池更改为我自己的帐户(在调试中成功使用的帐户)并且 still 得到错误。
匿名访问已关闭,Windows 身份验证已打开(部分 file.txt
是来自用户 AD 帐户的信息)。我尝试使用多个 AD 帐户访问该应用程序,无论是否可以访问 \server\C$\folder\subfolder\
,但它们都给出相同的错误。
我没有看到该应用如何在授权帐户下运行,并且用户可以使用授权帐户登录该应用,但仍然出现访问被拒绝的错误。有什么方法可以获取更多信息,具体说明哪些访问被拒绝或哪个帐户实际被拒绝?还有什么我在这里想念的吗??
首先,您可以尝试将要写入文本文件的文件夹的写入权限授予 IUSR 用户。
有一种方法可以通过在 web.config 文件中使用 Impersonate 标记来模仿 asp.net 应用程序中的用户,但我认为这可能很危险。
<identity impersonate="true" userName="nomducompte" password="motdepasse" />
希望对您有所帮助。
您需要检查其他进程是否已经打开了文件,例如 "A separate process is looking in that folder for text files to grab" - 也许这个单独的进程已经打开了文件,因此锁定了您的 IIS 进程?使用进程监视器 (https://docs.microsoft.com/en-us/sysinternals/downloads/procmon) 监视文件 activity。
另外,您将文件位置指定为“\server\C$\folder\subfolder\file.txt”。 UNC 路径通常以“\\”开头,例如“\\server\C$\folder\subfolder\file.txt”。这可能只是 Whosebug 将双斜线转义为单斜线的产物。
作为一个简单的测试,你能用自己的账号用记事本打开错误信息中的文件并写入文件吗?如果使用应用程序池身份帐户怎么办?
编辑:您 运行 具有文件位置的服务器上的进程监视器。添加这样的路径过滤器:
Path excludes file.txt then Exclude
其中 file.txt 是您正在监视的文件的文件名(不包括目录)。此过滤器将仅捕获该文件的事件,并将排除其他所有内容。事件发生后,右键单击它,然后转到“属性”、“进程”以查看发起事件的用户。
我正在尝试让我的 MVC 应用程序使用 System.IO.File.WriteAllText
将一个简单的文本文件写入另一台服务器。 (一个单独的进程正在该文件夹中查找要抓取的文本文件。)在我的本地机器上调试时它工作正常,但是当部署到测试服务器上的 IIS 时,我在尝试写入文件时总是遇到此错误:
Access to the path '\server\C$\folder\subfolder\file.txt' is denied.
SO 上至少六个类似问题的答案是授予应用程序池身份帐户访问该文件夹的权限。但是,IIS 上的应用程序池已经 运行 在一个对所需文件夹具有完全权限的服务帐户下,但仍然出现错误。我什至尝试将应用程序池更改为我自己的帐户(在调试中成功使用的帐户)并且 still 得到错误。
匿名访问已关闭,Windows 身份验证已打开(部分 file.txt
是来自用户 AD 帐户的信息)。我尝试使用多个 AD 帐户访问该应用程序,无论是否可以访问 \server\C$\folder\subfolder\
,但它们都给出相同的错误。
我没有看到该应用如何在授权帐户下运行,并且用户可以使用授权帐户登录该应用,但仍然出现访问被拒绝的错误。有什么方法可以获取更多信息,具体说明哪些访问被拒绝或哪个帐户实际被拒绝?还有什么我在这里想念的吗??
首先,您可以尝试将要写入文本文件的文件夹的写入权限授予 IUSR 用户。
有一种方法可以通过在 web.config 文件中使用 Impersonate 标记来模仿 asp.net 应用程序中的用户,但我认为这可能很危险。
<identity impersonate="true" userName="nomducompte" password="motdepasse" />
希望对您有所帮助。
您需要检查其他进程是否已经打开了文件,例如 "A separate process is looking in that folder for text files to grab" - 也许这个单独的进程已经打开了文件,因此锁定了您的 IIS 进程?使用进程监视器 (https://docs.microsoft.com/en-us/sysinternals/downloads/procmon) 监视文件 activity。
另外,您将文件位置指定为“\server\C$\folder\subfolder\file.txt”。 UNC 路径通常以“\\”开头,例如“\\server\C$\folder\subfolder\file.txt”。这可能只是 Whosebug 将双斜线转义为单斜线的产物。
作为一个简单的测试,你能用自己的账号用记事本打开错误信息中的文件并写入文件吗?如果使用应用程序池身份帐户怎么办?
编辑:您 运行 具有文件位置的服务器上的进程监视器。添加这样的路径过滤器:
Path excludes file.txt then Exclude
其中 file.txt 是您正在监视的文件的文件名(不包括目录)。此过滤器将仅捕获该文件的事件,并将排除其他所有内容。事件发生后,右键单击它,然后转到“属性”、“进程”以查看发起事件的用户。