2

我使用 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 上的文件,但在调试时工作正常

4

4 回答 4

8

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

于 2013-05-24T08:42:10.677 回答
2

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

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

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

显示 IIS 凭据设置的屏幕截图

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

于 2013-05-24T09:02:54.943 回答
2

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

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

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

我希望这对您有所帮助。

于 2013-05-24T09:00:26.967 回答
0

可能是你应该使用Path.DirectorySeparatorChar

于 2013-05-24T08:41:58.333 回答