2012-09-12 6 views
7

Ok, ich glaube ich mache hier etwas sehr leichtes. Ich habe eine ASP.NET-Webseite geschrieben und versuche gerade, in das lokale Verzeichnis zu schreiben.Wie konfiguriere ich mein ASP.NET-Verzeichnis, um das Schreiben einer Protokolldatei zu ermöglichen?

Ich verwende den folgenden Code ein:

System.IO.File.WriteAllLines("log.txt", messages); 

ich die folgende Ausnahme werfe.

Access to the path 'c:\windows\system32\inetsrv\log.txt' is denied. 

Meine ASP.NET-Anwendung befindet sich im folgenden Verzeichnis.

c:\inetpub\wwwroot\sites\mysite\ 

So bin ich verwirrt, warum es versucht, c zu schreiben: \ windows \ system32 \ inetsrv \ Verzeichnis, wenn ich nicht das Verzeichnis bin Versorgung selbst.

Ich habe versucht, den Code zu ändern, aber es gibt mir die gleiche Fehlermeldung mit einem neuen Verzeichnis.

System.IO.File.WriteAllLines("c:\\inetpub\\wwwroot\\sites\mysite\log.txt", messages); 

bearbeiten 1

Es war schwer, eine Antwort auf diese zu akzeptieren, weil jeder mir wirklich eine Menge geholfen. Ich akzeptierte tom_yes_toms Antwort, weil er der Erste war, der seine Antwort posten konnte, was die erste Hälfte meines Problems war. Die andere Hälfte meines Problems hing mit der Lösung von hbrock zusammen, auf die Fabio hingewiesen hatte.

+0

welche Identität Der App-Pool Ihrer ASP.NET-Anwendung wird als? – kd7

Antwort

7

Erstellen Sie den Ordner "C: \ inetpub \ wwwroot \ sites \ mysite \ App_Data" und speichern Sie Ihre Daten dort.

System.IO.File.WriteAllLines(Server.MapPath("~/App_Data/log.txt")) 

Wenn Sie unbedingt an die mysite Verzeichnis speichern müssen, um eine Protokolldatei dort setzen und setzen Verzeichnisberechtigungen entsprechend bewusst Sicherheitsfolgen sein. Der Benutzer, unter dem IIS ausgeführt wird, muss dieses Verzeichnis lesen und schreiben können.

Vollqualifikations Pfad: System.Web.HttpContext.Current.Server

+0

ausgeführt. Ich werde das versuchen. – meanbunny

+0

Ich habe diesen Ansatz verwendet und habe immer noch den gleichen Fehler. Zugriff auf den Pfad 'C: \ inetpub \ wwwroot \ sites \ mysite \ production \ App_Data \ log.txt 'wurde verweigert – meanbunny

1

Dies soll helfen:

lesen zu gewähren, Schreiben und Ändern von Berechtigungen auf eine bestimmte Datei

In Windows Explorer suchen und die gewünschte Datei auswählen.

Klicken Sie mit der rechten Maustaste auf die Datei, und klicken Sie dann auf Eigenschaften.

Klicken Sie im Dialogfeld Eigenschaften auf die Registerkarte Sicherheit.

Überprüfen Sie auf der Registerkarte Sicherheit die Liste der Benutzer. Wenn das Netzwerkdienstkonto nicht aufgeführt ist, fügen Sie es hinzu.

Klicken Sie im Dialogfeld Eigenschaften auf den Benutzernamen und im Bereich Berechtigungen für NETZWERKDIENST die Berechtigungen Lesen, Schreiben und Ändern.

Klicken Sie auf Übernehmen, und klicken Sie dann auf OK

Informationen von: http://msdn.microsoft.com/en-us/library/ff647402.aspx#paght000015_fileaccess

+0

Ich hatte auch dieses Sicherheitsproblem. Mein erster Versuch bestand darin, NetworkService ohne Leerzeichen hinzuzufügen, und es erkannte kein Sicherheitsobjekt, also gab ich diesen Ansatz auf, aber @Fabio Gouw wies darauf hin, dass ein Leerzeichen benötigt wurde. – meanbunny

3

Sie erhalten „Zugriff auf den Pfad 'C: \ windows \ system32 \ inetsrv \ log.txt' verweigert."Wenn Sie System.IO.File.WriteAllLines (" log.txt ", Meldungen) ausführen, weil c: \ windows \ system32 \ inetsrv das Verzeichnis ist, in dem sich die IIS-Programmdatei befindet (w3wp.exe).

Sie haben Server.MapPath verwenden, damit es Ihnen den physischen Pfad des virtuellen Verzeichnisses gibt.

suchen, die Benutzer ihr virtuelles Verzeichnisses des Anwendungspool ausgeführt wird, und geben Sie ihn auf dem Ordner Ihrer virtuellen Verzeichnisberechtigungen schreiben.

+0

Ok, also habe ich mir den Anwendungspool angeschaut und er sagt seinen Identity-> NetworkService. NetworkService befindet sich nicht in der Berechtigungsliste für das tatsächliche Site-Verzeichnis. – meanbunny

+0

Folgen Sie den Anweisungen von @hbrock, um eine Schreibberechtigung für Ihren Ordner für NETWORK SERVICE zu erteilen. – Fabio

+0

Ok, ich werde es noch einmal versuchen. Ich hatte versucht, NetworkService ohne Leerzeichen zu machen, so dass das mein Problem gewesen sein könnte. – meanbunny

Verwandte Themen