2017-08-25 226 views
0

目標
更改IIS綁定和交換虛擬目錄在每個請求的基礎上。一個簡單的應用程序將使用Microsoft.Web.Administration打開,替換和提交。以下是簡化流程: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() 
+0

線程模擬是無用的。 LocalService不是本地管理員。您必須以LocalSystem身份運行池。 –

+0

嘗試了上述所有操作,包括使用LocalSystem身份池。 – fcm

回答

0

一些檢查和實驗後,我發現該辦法讓它工作是

  • 不要在應用程序中使用的身份驗證。
  • 請勿使用模擬。
  • LocalService不起作用。
  • 運行它有足夠的權限(管理員)池

看起來像使用模擬再次打破它。

這不是我想要的設置,但我想我可以生存並將應用程序移動到這個不安全的池中,進行更改並將其移回到通用ApplicationPoolIdentity。