【问题标题】:File.Exists() always returns false on IISFile.Exists() 在 IIS 上总是返回 false
【发布时间】:2013-05-19 19:20:12
【问题描述】:

我使用 File.Exists() 检查的文件路径位于映射驱动器 (Z:\hello.txt) 上。代码在调试环境中运行良好,但是在 IIS 中,它总是返回 false

var fullFileName = string.Format("{0}\\{1}", ConfigurationManager.AppSettings["FileName"], fileName);

if (System.IO.File.Exists(fullFileName))

为什么会这样,我该如何解决这个问题?

我已授予每个人对该映射驱动器的完全读/写权限

编辑:

我尝试通过\\192.168.1.12\Examples\Files\2.xml 删除文件,得到相同的结果。它不会在 IIS 上检测到文件,但在调试时工作正常

【问题讨论】:

    标签: c# asp.net file iis file-permissions


    【解决方案1】:

    您的 Web 应用程序在特定的安全上下文下运行,您需要找出这是什么上下文。如果是普通用户,以用户身份打开命令提示符(使用runas工具),使用命令提示符映射所需的驱动器(一定要使用/persistent:yes标志)

    或者,您为什么不能只使用 UNC 路径 (\\serverName\shareName) 并避免所有这些废话?

    编辑:2013-05-27 要解决此问题,请根据您想要的任何应用程序池创建一个新的应用程序池。然后设置运行该池的标识,如随附的屏幕截图所示。

    确保此用户对文件共享具有正确的权限,然后重新测试

    【讨论】:

    • 我刚试过。我正在尝试使用此路径删除我的文件 \\192.168.1.12\Examples\Files\2.xml - 结果相同。它适用于 VS 的调试,但不适用于托管在 IIS 中。
    • 您的网站运行的应用程序池的标识是什么?
    【解决方案2】:

    我在使用网络映射驱动器时遇到过类似的问题,运行调试代码应用程序运行良好,运行发布版本应用程序时找不到文件。

    如果文件存储在部署应用程序的同一台服务器上,我们通过存储映射驱动器的本地驱动器目录位置找到了解决方案,例如 Z:\files\ 可能是 E:\folder\folder1\

    如果应用程序部署在我们发现使用完整网络名称的单独服务器上,例如\\server1\folder\

    我希望这对你有所帮助。

    【讨论】:

    • 我刚试过。我正在尝试使用此路径 \\192.168.1.12\Examples\Files\2.xml 删除我的文件 - 结果相同。它适用于 VS 的调试,但不适用于托管在 IIS 中。
    【解决方案3】:

    我认为您的应用程序没有“Z:”权限 是“Z:”网盘吗?

    【讨论】:

    • 用户 LocalSystem (NT AUTHORITY\SYSTEM) 没有网络访问权限 AFAIK。如果是这样,那么“您”(您的应用程序)必须冒充另一个用户。
    • 因为ISS运行在你电脑上的user:SYSTEM上,所以无法访问Z:drive
    【解决方案4】:

    也许你应该使用Path.DirectorySeparatorChar

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      • 2013-02-22
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多