ASP Classic中FileSystemObject无法访问映射驱动器R:的问题
ASP Classic访问映射驱动器R盘报错的解决办法
你遇到的问题本质上是IIS应用池的运行身份和用户会话级映射驱动器的隔离问题,加上权限配置不到位,下面给你几个针对性的解决方案:
1. 优先改用UNC路径(最可靠的方案)
映射驱动器(比如R:\)是绑定到当前登录用户会话的,而IIS的应用池是用单独的系统账号运行的,它根本看不到你手动映射的R盘。所以直接用共享文件夹的UNC路径替代驱动器字母是最稳妥的:
修改你的代码:
sDir = "\\你的共享服务器名\共享文件夹名\database\attendanceData\" Set fso = Server.CreateObject("Scripting.FileSystemObject") Set obj_FolderBase = fso.GetFolder(sDir) if obj_FolderBase.Files.Count = 0 then response.write " No Attendance Data Found!" response.End end if response.write "IT is working" response.End
2. 给应用池身份配置共享权限
不管用UNC还是映射驱动器,IIS应用池的运行账号必须拥有访问目标共享文件夹的权限:
- 打开IIS管理器,找到你的站点对应的应用池,进入「高级设置」查看「标识」(默认可能是
ApplicationPoolIdentity或Network Service)。 - 到共享驱动器所在的服务器上,给这个账号设置:
- 共享权限:至少授予「读取」权限;
- NTFS权限:授予「读取」「列出文件夹内容」权限。
- 如果你的共享是域环境下的,把应用池身份改成有访问权限的域账号会更方便。
3. 非要用映射驱动器的话(不推荐)
如果必须保留R:\这种写法,需要在IIS服务的登录账号下完成映射:
- 打开「服务」(services.msc),找到
IIS Admin Service和World Wide Web Publishing Service,查看它们的登录身份。 - 用这个身份登录到服务器(本地账号需要控制台登录,域账号可以远程),手动映射R盘并勾选「登录时重新连接」。
- 重启IIS相关服务,让服务加载这个映射。
另外提个小细节:你的代码里response.write和引号之间最好加个空格,避免输出时出现语法问题(虽然这次报错不是因为这个)。
内容的提问来源于stack exchange,提问作者Hanz Cheah
相关产品推荐
相关产品推荐

