【发布时间】:2010-11-01 19:53:02
【问题描述】:
我正在使用 ADSI 查询 IIS 元数据库的网页中运行一段代码。代码就这么简单:
DirectoryEntry iisNode =
new DirectoryEntry("/LM/W3SVC/1/ROOT/MyAspWebsite-1-128886021498831845");
foreach (DirectoryEntry de in iisNode.Parent.Children)
{
System.Console.WriteLine(de.Name);
}
当我在 IIS7/W2K8 上的 DefaultAppPool 下运行页面/站点时,这可以正常工作。但是,当我创建自己的应用程序池并使属性与默认应用程序池相同时,此代码将失败并出现以下错误:
Caught: System.Runtime.InteropServices.COMException
Failed to parse virtual directory:
/LM/W3SVC/1/ROOT/MyAspWebsite-1-128889542757187500
System.Runtime.InteropServices.COMException (0x80070005): Access is denied.
DefaultAppPool 有哪些特权?我没有看到任何记录。我需要它在非默认应用程序池中工作,但 没有 为整个工作进程提供提升的权限。我还尝试使用 DirectoryEntry 构造函数的用户名和密码参数,在运行 IIS7 的机器上使用 Admin,但这并没有改变任何东西。我还要注意,这在 IIS6 和 W2K3 上很好工作。
感谢任何帮助。
【问题讨论】:
-
您确定两个应用程序池都在同一个身份下运行吗?
-
是的,如果您查看进程资源管理器,它们都作为 NT AUTHORITY\NETWORK SERVICE 运行,并且都具有“系统”的完整性。如果您查看 w3wp.exe 两个实例的高级属性的进程资源管理器下的安全选项卡,它们属于完全相同的一组组,只有一个区别,DefaultAppPool 是 IIS APPPOOL\DefaultAppPool 组的一部分,并且自定义应用程序池属于 IIS APPPOOL\CustomAppPool 组。
-
当您说您创建了自己的应用程序池时,您是否只是创建了一个全新的应用程序池并将您现有的应用程序添加到其中并且它失败了?或者,您是否正在创建一个与新应用程序池相关联的全新站点(因此,可能是根上的应用程序)?也许权限问题是因为您在路径 /LM/W3SVC/1/ROOT... 中引用了站点 ID 1...?
-
我怀疑一年后你仍然需要一个答案,但我遇到了和你一样的问题,花了一整天的时间来摸索。我希望我下面的回答有一天能帮助别人。 stackoverflow.com/questions/975838/…
标签: asp.net iis iis-7 active-directory iis-6