it-swarm.com.de

IIS ApplicationPoolIdentity hat keine Schreibberechtigung für 'Temporäre ASP.NET-Dateien'

Ich versuche, eine Website aus einem "AppPool" mit dem Namen "SomeAppPool" zu starten, in dem die "ApplicationPoolIdentity" verwendet wird. Wenn ich die Seite rufe, erhalte ich beim Starten der Website die folgende Fehlermeldung:

Die aktuelle Identität (IIS_APPPOOL\SomeAppPool) hat keinen Schreibzugriff auf 'c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporäre ASP.NET-Dateien'.

Ich starte die Website mit "Use Local IIS Web Server" in Visual Studio 2012 (ohne angehängten Debugger) unter Windows 8.

Das erste, was mir aufgefallen ist, ist, dass der Ordner "Temporäre ASP.NET-Dateien" nicht einmal vorhanden ist. Es gibt also keine Sicherheitsberechtigungen.

Das zweite Problem ist, welche Berechtigungen würde ich auch bei einem Ordner festlegen? Ich gehe davon aus, dass ich nicht für jeden Benutzer, der mit 'ApplicationPoolIdentity' erstellt wurde, Berechtigungen festlegen muss. Recht?

Die aktuellen Lösungen, die ich gesehen habe, schlagen einfach vor, den Benutzer auf 'Network Service' Zu setzen. Dies scheint jedoch die Isolation der Website zu durchbrechen, für die 'ApplicationPoolIdentity' Eingeführt wurde.

30
karmasponge

Diese Antwort im ASP.NET-Forum , in seinem Thread nicht bestätigt, war die Lösung für mich. Es hat auch geringe Auswirkungen: Es wird nicht versucht, IIS erneut zu registrieren oder dem Benutzer gefährliche Berechtigungen zu gewähren. Um die Antwort zusammenzufassen:

  1. Öffnen Sie ein Befehlsfenster als Administrator (Start/Programme/Zubehör, klicken Sie mit der rechten Maustaste auf die Eingabeaufforderung und wählen Sie "Als Administrator ausführen").
  2. Geben Sie den folgenden Befehl ein:

    C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Aspnet_regiis.exe -ga domain\user
    

Ersetzen Sie im obigen Beispiel Ihre Domäne und Ihren Benutzer durch domain\user. Das ist alles was es brauchte.

Die Microsoft-Dokumentation für Aspnet_regiis.exe ist hier . Beachten Sie, dass sich die Dokumentation für den Schalter -ga auf einen Fehler in Version 3.5 und früheren Versionen bezieht, bei dem er nicht mit lokalen Konten funktioniert. Wenn ich es richtig lese, werden Domänenkonten für alle Versionen und lokale Konten ab Framework 4.0 unterstützt.


Update 6 Juni 2017: Unter Windows 8 und höher sollte stattdessen der Befehl dism verwendet werden. Es ist in dieser SO Antwort enthalten. Vielen Dank an @codebrain für diesen Vorschlag.


Update 7 Juli 2015: @Vertigo kommentierte freundlicherweise, dass diese Antwort auch für das NETWORK SERVICE-Konto in .NET 2.0 unter 2008R2/2012 funktionierte, sodass mein obiger Haftungsausschluss zu lokalen Konten vor 4.0 möglicherweise falsch ist.

Wenn jemand anderes herausfindet, dass dies für ein lokales Konto unter .NET 3.5 oder früher funktioniert, können Sie meine Antwort bearbeiten oder in den Kommentaren vermerken. Es wäre eine große Hilfe für andere, die das gleiche Problem haben könnten.

69
Ed Gibbs

Überprüfen Sie neben den hoch bewerteten Lösungen auch Ihren Festplattenspeicher und stellen Sie sicher, dass genügend Speicherplatz verfügbar ist. 

Ich bin gerade auf dieses Problem auf einem unserer Produktionsserver gestoßen und es stand im Zusammenhang mit dem geringen Festplattenspeicher. 

5
Dilish

Ich habe den Fehler behoben, indem ich den Benutzer, den der Anwendungspool verwendet, zur Gruppe IIS_IUSRS hinzufügt.

5
Alocyte

Ich stand vor demselben Problem. Ich habe den Pfad c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\ nach Temporary ASP.NET Files gesucht, aber es gab keinen Ordner mit diesem Namen. Also habe ich einen neuen Ordner manuell erstellt und Temporary ASP.NET Files benannt und das Problem behoben. 

Stellen Sie also sicher, dass der angegebene Pfad vorhanden ist. 

5
Behnam

Wenn Sie sich in C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319 befinden, versuchen Sie, den Befehl aspnet_regiis.exe auszuführen.

Normalerweise sollten die Berechtigungen eingerichtet werden. Wenn Windows-Programme hinzufügen oder entfernen oder neue .NET-Versionen installiert werden, werden diese Dinge ein wenig zurückgesetzt. Das Ausführen des aspnet_regiis.exe sollte dort helfen.

Stellen Sie außerdem sicher, dass Sie Visual Studio als Administrator ausführen.

1
Raja Nadar

Ich bin gerade auf dieses Thema gestoßen und was ich getan habe, war ein neues Konto zu erstellen, sagen wir "Webby".

Rufen Sie in der ISS die erweiterten Einstellungen Ihrer Seite auf und ändern Sie "Physische Pfadberechtigungen" in das Webby-Konto. Das Pfadfeld darüber hat das Webseitenverzeichnis. Öffnen Sie diesen Ordner im Explorer und fügen Sie Webby mit Änderungsberechtigungen hinzu. Unter "Failed Request Tracing" befindet sich ein Protokollverzeichnis. füge auch das hinzu, und setze "Enabled" auf true (du kannst es später ausschalten, aber stelle sicher, dass es funktioniert) . An diesem Punkt kannst du deine Site ausprobieren und du solltest die Fehlermeldung auf jeden Fall bekommen, weil des Benutzers, den Sie verwenden.

Die aktuelle Identität (YOUR\Webby) hat keinen Schreibzugriff auf "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporäre ASP.NET-Dateien".

Um Ihr Problem zu beheben, müssen Sie das Verzeichnis "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files" aufrufen und Webby ebenfalls hinzufügen. Auch hier funktioniert "Ändern".

Die Lösung eines speziellen Kontos nur für Websites ist eine gute Idee. Es ist ein echter Account (nicht virtuell wie ApplicationPool) und Windows wird nicht verwirrt (... so leicht).

Hoffe das hilft.

0
Engineer

ich löste es indem ich Speicherplatz freigebe

0
Shimon Doodkin

In IIS7 habe ich mit der rechten Maustaste auf das virtuelle Verzeichnis geklickt, die Anwendung entfernt und erneut hinzugefügt. Das hat es für mich behoben.

0
Dave