2017-08-25 4 views
0

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() 
+0

Thread Identitätswechsel ist nutzlos. LocalService ist kein lokaler Administrator. Sie müssen in einem Pool mit LocalSystem als Identität ausgeführt werden. –

+0

Alle oben genannten Schritte wurden durchgeführt, einschließlich der Verwendung eines LocalSystem-Identitätspools. – fcm

Antwort

0

Nach einiger Kontrolle und Experiment mir, dass die Art und Weise war es

Arbeit zu machen herauszufinden
  • keine Authentifizierung über die Anwendung anwenden.
  • Verwenden Sie keinen Identitätswechsel.
  • LocalService funktioniert nicht.
  • Run es auf einen Pool mit genügend Berechtigungen (Administrator)

Sieht aus wie Identitätswechsel bricht es wieder.

Dies ist nicht die Einstellung, die ich wollte, aber ich denke, ich kann überleben und verschieben Sie die App in diesen unsicheren Pool, arbeiten Sie die Änderungen und verschieben Sie es zurück zu einem generischen ApplicationPoolIdentity.

Verwandte Themen