2012-09-12 4 views
7

私はここで何か非常に簡単にやっていると信じています。私はASP.NET Webページを書いており、ローカルディレクトリに書き込もうとしています。ログファイルを書き込めるようにASP.NETディレクトリを設定するにはどうすればよいですか?

私は、次のコードを使用しています:

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

私は次の例外をスローしています。

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

マイASP.NETアプリケーションは、次のディレクトリにあります。

c:\inetpub\wwwroot\sites\mysite\ 

だから私はCに書き込みをしようとしている理由に混乱しています:\ WINDOWS \ SYSTEM32 \私はそのディレクトリ自体を供給していないのですinetsrvに\ディレクトリ。

私は次のコードを変更しようとしましたが、新しいディレクトリで同じエラーメッセージが表示されます。

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

編集1

誰もが本当にトンを私を助けたので、この上の答えを受け入れることは困難でした。私はtom_yes_tomの答えを受け入れました。なぜなら、彼は私の問題の最初の半分だった彼の返答を最初に投稿したからです。私の問題の残りの半分はFabioが指摘したhbrockの解決策に関連していました。

+0

をあなたのASP.NETアプリケーションのアプリケーションプールは? – kd7

答えて

7

"C:¥inetpub¥wwwroot¥sites¥mysite¥App_Data"というフォルダを作成し、そこにデータを保存します。

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

あなたは絶対に存在し、適切にディレクトリのパーミッションを設定し、ログファイルを置くのセキュリティ波及効果を認識して、個人用サイトのディレクトリに保存する必要があります。 IISが実行されているユーザーは、そのディレクトリを読み書きできなければなりません。

のフル予選パス:System.Web.HttpContext.Current.Server

+0

として実行しています。これを試してみます – meanbunny

+0

この方法を使用しても同じエラーが発生しました。 'C:\ inetpub \ wwwroot \ sites \ mysite \ production \ App_Data \ log.txt 'は拒否されました – meanbunny

1

これは役立つはず:

を読む付与するには、書き込み、およびWindowsエクスプローラで特定のファイル

へのアクセス権を変更する、必要なファイルを見つけて選択します。

ファイルを右クリックし、[プロパティ]をクリックします。

[プロパティ]ダイアログボックスで、[セキュリティ]タブをクリックします。

[セキュリティ]タブで、ユーザーの一覧を確認します。ネットワークサービスアカウントがリストにない場合は、追加します。

[プロパティ]ダイアログボックスで、[ネットワークサービス]ユーザー名をクリックし、[ネットワークサービスのアクセス許可]セクションで[読み取り]、[書き込み]、および[変更]の各アクセス許可を選択します。あなたは「パスへのアクセス受け取っているhttp://msdn.microsoft.com/en-us/library/ff647402.aspx#paght000015_fileaccess

+0

私もこのセキュリティ上の問題がありました。私の最初の試みはスペースなしでNetworkServiceを追加し、セキュリティオブジェクトを認識しなかったので、私はそのアプローチをあきらめましたが、@Fabio Gouwが指摘したように、スペースが必要でした。 – meanbunny

3

[適用]をクリックして、[OKから

情報をクリックして 'C:\ WINDOWS \ system32に\ inetsrvに\ log.txtという' が拒否されます。"c:\ windows \ system32 \ inetsrvはIIS実行ファイルが置かれているディレクトリ(w3wp.exe)であるため、System.IO.File.WriteAllLines(" log.txt "、messages)を実行すると表示されます。

それはあなたの仮想ディレクトリの物理パスを与えるようにします。ユーザーが仮想ディレクトリのアプリケーションプールを実行している

ルックをServer.MapPathのを使用して、彼はあなたの仮想ディレクトリのフォルダに書き込み権限を与える。何アイデンティティ

+0

だから私はアプリケーションプールを見て、それはそのアイデンティティ - > NetworkServiceを言う。 NetworkServiceは、実際のサイトディレクトリのアクセス許可リストにありません。 – meanbunny

+0

@ hbrockの指示に従い、NETWORK SERVICE – Fabio

+0

のフォルダに対する書き込み権限を与えます。もう一度試してみます。私はスペースなしでNetworkServiceをしようとしていたので、それは私の問題でした。 – meanbunny

関連する問題