Iis 7 ASP Classic无法使用IIS 7上的FileSystemObject访问虚拟目录

Iis 7 ASP Classic无法使用IIS 7上的FileSystemObject访问虚拟目录,iis-7,asp-classic,permissions,virtual-directory,Iis 7,Asp Classic,Permissions,Virtual Directory,我有一个经典的ASP网站,我们已经从IIS 6移动到Win2k8和IIS 7。在网站文件夹结构中,有一个名为Products的虚拟目录,其中包含物理存储在同一服务器上其他位置的JPG 在web浏览器中,任何产品JPG都会正确显示在页面上。例如,工作是一种享受 但是,在ASP代码中尝试使用FileSystemObject访问此文件夹时,此文件夹不可用-除虚拟目录外,其他所有文件/文件夹都在其中。下面是一个示例ASP代码段: Set objFSO = Server.CreateObject( "Sc

我有一个经典的ASP网站,我们已经从IIS 6移动到Win2k8和IIS 7。在网站文件夹结构中,有一个名为Products的虚拟目录,其中包含物理存储在同一服务器上其他位置的JPG

在web浏览器中,任何产品JPG都会正确显示在页面上。例如,工作是一种享受

但是,在ASP代码中尝试使用FileSystemObject访问此文件夹时,此文件夹不可用-除虚拟目录外,其他所有文件/文件夹都在其中。下面是一个示例ASP代码段:

Set objFSO = Server.CreateObject( "Scripting.FileSystemObject" )
Set objBaseFolder = objFSO.GetFolder( Server.Mappath( "../../Images" ) )
For Each objFolder In objBaseFolder.SubFolders  
    Response.Write( objFolder.Name & "<br>" )
Next
Set objFolder = Nothing
Set objBaseFolder = Nothing
Set objFSO = Nothing
Set objFSO=Server.CreateObject(“Scripting.FileSystemObject”)
设置objBaseFolder=objFSO.GetFolder(Server.Mappath(“../../Images”))
对于objBaseFolder.SubFolders中的每个objFolder
Response.Write(objFolder.Name&“
”) 下一个 设置objFolder=Nothing 设置objBaseFolder=Nothing 设置objFSO=Nothing
此外,Persit的ASPJpeg Com对象从ASP代码中打开JPG文件并将其保存到此虚拟目录

在IIS7中,该网站有一个应用程序池,我尝试了各种方式设置其标识,但都没有效果。我还尝试将各种安全设置(IUSR、网络服务等)应用于虚拟目录所指向的物理文件夹,甚至一度授予“所有人”完全控制权


ASP进程似乎确实没有访问虚拟目录的权限。如果有人知道如何解决这个问题,我会非常感激。

我隐约记得有过这样的问题,罪魁祸首是
Server.Mappath
。为了解决这个问题,我需要映射到文件夹中的一个文件,然后删除文件部分

 Server.Mappath( "../../Images/dummy.gif")

出于安全原因,不总是允许使用“./”符号。如果您有访问IIS的权限,请查看它是启用还是禁用。

使用
FileSystemObject
来执行此操作永远不会起作用,因为它只在物理文件系统上工作。它不知道或不了解虚拟目录-站点的这方面完全由IIS管理

这不是权限问题,而是目录不存在的问题,因此浏览物理文件系统将永远看不到它

IIS管理虚拟目录:

  • 在浏览器中导航到图像会起作用,因为IIS会自动将虚拟路径映射到相应的物理路径
  • 使用AspJpeg最有可能是因为它使用对
    Server.MapPath
    的调用将给定路径解析为物理路径

这不可能是权限问题,因为您声明AspJpeg可以很好地读写虚拟目录,而且您可以通过浏览器很好地访问它。

我不认为它是Server.MapPath,因为如果我用完整的物理路径替换它,我仍然会得到相同的结果。它不是“。/”注释,因为我在IIS设置中允许使用ParentPath。我提供的ASP代码段在某种程度上起作用-它正确列出了images文件夹的所有子文件夹,除了一个虚拟目录之外。此外,如果我将我的ASP页面移动到根目录中,并将SeverMapPath更改为“images”,那么我仍然会得到相同的结果。谢谢你的回复。这是一个现有的ASP网站,在WIN2003和IIS6下运行良好。我已经做了一些进一步的调查,Server.MapPath为虚拟文件夹返回了错误的物理地址,例如“D:\Websites\MySite\Images\Products”而不是“D:\Uploads\Products”。如果我使用完整的物理路径,那么objFso.GetFolder(“D:\Uploads\Products”)也会失败。但是,objFSO.FileExists(“D:\Uploads\Products\black.jpg”)可以工作。我认为在IIS6和IIS7之间,虚拟目录的行为有些许改变。@David可能已经改变了,我所有的网站都运行在IIS7上(包括经典的ASP驱动的网站),我已经有一段时间没有使用IIS6了,所以不记得它是否使用过,如果是,如何使用,对不起,我帮不上什么忙了