IIS使用Microsoft.Web.Administration并提交更改

时间:2017-08-25 22:11:41

标签: asp.net iis iis-7 windows-server-2008-r2

目标
根据请求更改IIS绑定和交换虚拟目录。一个简单的应用程序将使用Microsoft.Web.Administration打开,替换和提交。以下是简化流程:

代码

ServerManager = New ServerManager()
config = ServerManager.GetApplicationHostConfiguration()
SiteList = config.GetSection("system.applicationHost/sites")
SitesCollection = SiteList.GetCollection()
_site = SitesCollection.FirstOrDefault(Function(f) f.GetAttributeValue("name").ToString() = "XXX")
_bindings = _site.GetCollection("bindings")
_bind As ConfigurationElement = _bindings.CreateElement("binding")
_bind("protocol") = "http"
_bind("bindingInformation") = String.Format("*:80:{0}", "www.zzz.yyy")
_bindings.Add(_bind)
ServerManager.CommitChanges()

问题
此代码在管理员身份验证的网页上运行,在调用之前,模拟该线程以确保权限到位。我被允许阅读.config但不写!我还确认,在任何调用之前,该线程以管理员身份运行。我也尝试过使用LocalService池但是再没有运气。

错误

Filename: \\?\C:\Windows\system32\inetsrv\config\applicationHost.config
Error: Cannot write configuration file due to insufficient permissions
hresult: 0x80070005
at Microsoft.Web.Administration.Interop.AppHostWritableAdminManager.CommitChanges()

1 个答案:

答案 0 :(得分:0)

经过一些检查和实验后,我发现让它发挥作用的方法是

  • 请勿在应用程序上使用身份验证。
  • 请勿使用假冒。
  • LocalService不起作用。
  • 在具有足够权限的池(管理员)
  • 上运行它

看起来使用模拟会再次破坏它。

这不是我想要的设置,但我认为我可以存活并将应用程序移动到这个不安全的池中,处理更改并将其移回通用ApplicationPoolIdentity。