Ziel
Ändern Sie IIS-Bindungen und virtuelle Verzeichnisse auf einer Anforderung austauschen. Eine einfache Anwendung wird mit der Microsoft.Web.Administration
geöffnet, ersetzt und commit. Es folgt ein vereinfachte Ablauf:IIS mit Microsoft.Web.Administration und Commit-Änderungen
Code
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()
Problem
Dieser Code läuft auf einer Administrator-authentifizierten Webseite, und vor dem Aufruf wird der Faden imitiert um sicherzustellen, dass die Privilegien an Ort und Stelle. Ich darf die .config lesen, aber nicht schreiben! Ich habe auch bestätigt, dass der Thread vor jedem Aufruf als Administrator ausgeführt wird. Ich habe auch versucht, einen LocalService-Pool zu verwenden, aber wieder kein Glück.
der Fehler
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()
Thread Identitätswechsel ist nutzlos. LocalService ist kein lokaler Administrator. Sie müssen in einem Pool mit LocalSystem als Identität ausgeführt werden. –
Alle oben genannten Schritte wurden durchgeführt, einschließlich der Verwendung eines LocalSystem-Identitätspools. – fcm