AppDomain卷影复制文件访问被拒绝,ASP.NET站点在IIS6上运行

本文关键字:站点 NET ASP IIS6 运行 拒绝 复制 文件 访问 AppDomain | 更新日期: 2023-09-27 18:25:19

我在AppDomains的卷影复制功能与IIS下运行的ASP.NET网站结合使用时遇到了一些问题。问题是,由于权限不足,IIS用户无法读取或执行卷影复制的文件。

当执行新AppDomain中的代码时(通过DoCallBack的回调方法),我收到以下错误消息:
System.IO.FileLoadException:无法加载文件或程序集"My.Namespace.AssemblyName,Version=0.0.3.2231,Culture=neutral,PublicKeyToken=null"或其依赖项之一。访问被拒绝。

融合日志:

      程序集管理器加载自:C:''WINDOWS''Microsoft.NET''Framework''v2.0.50727''mscorwks.dll在可执行文件c:''windows''system32''inetsrv''w3wp.exe下运行---下面是详细的错误日志。===预绑定状态信息===日志:User=NT AUTHORITY''NETWORK SERVICE日志:DisplayName=My.Namespace.AssemblyName,Version=0.0.3.2231,Culture=neutral,PublicKeyToken=null(详细说明)日志:Appbase=file:///C:/Inetpub/wwwroot/Web套房/小工具日志:初始PrivatePath=NULL正在调用程序集:(未知)。===日志:此绑定在默认加载上下文中启动。日志:找不到应用程序配置文件。日志:正在使用主机配置文件:''''?''C: ''WINDOWS''Microsoft.NET''Framework''v2.0.50727''aspnet.config日志:使用C:''WINDOWS''Microsoft.NET''Framework''v2.0.50727''config''machine.config中的计算机配置文件。日志:此时未将策略应用于引用(私有、自定义、部分或基于位置的程序集绑定)。日志:正在尝试下载新URLfile:///C:/Inetpub/wwwroot/Web套件/小工具/My.Namespace.AssemblyName.DLL。错误:未能完成程序集的设置(hr=0x8007005)。探测已终止。
    

我已经做了什么:
我已授予用户"NETWORK SERVICE"的"C:''Inetpub/wwwwroot/Web Suite/Widgets"文件夹读取和执行权限
当我关闭阴影复制功能时,一切都很好
即使在Visual Studio 2008下的本地计算机上,它也能毫无问题地运行
授予Widgets文件夹中的所有文件(而不是文件夹本身)读取和执行权限并不能解决问题。

我认为这与ASP.NET临时文件文件夹的权限有关:
C: ''WINDOWS''Microsoft.NET''Framework''v2.0.50727''临时ASP.NET文件'' web套件
这个文件夹,它的所有子文件夹和其中的文件都已读过&执行用户"网络服务"的权限。所以这也不是问题所在。

简而言之:
为什么我的网站(在IIS6下运行)不能访问新AppDomain的卷影复制文件

AppDomain卷影复制文件访问被拒绝,ASP.NET站点在IIS6上运行

问题的原因是CachePath默认值。如果在网络服务下运行AppPool,则使用DefaultUser临时文件夹位置(我不知道为什么)。但网络服务无法访问该文件夹,这也是出现异常的原因。解决方案是显式设置CachePath。例如,我们可以使用ASP.NET AppPool缓存路径:

var domainInfo = new AppDomainSetup
  {
    CachePath = AppDomain.CurrentDomain.SetupInformation.CachePath
    /* ...*/
  };

尝试使用-ga选项运行aspnet_regiis,如下所示:

aspnet_regiis -ga MachineName'AccountName

其中MachineName''AccountName是应用程序池的标识。