[C#] パスへのアクセスが拒否されました


Answers

パス 'C:\ inetpub \ wwwroot \ mysite \ images \ savehere'へのアクセスが拒否されました

メッセージを注意深く読んでください。 ディレクトリと同じ名前のファイルに保存しようとしています。 それがうまくいかない場合は、ファイルで満たされたディレクトリを1つの新しいファイルで上書きすることはできません。 それは、起こりえないようにするために、ファイルシステムが逆戻りしていることを意味します。

例外メッセージは理想的ではありませんが、OSからまっすぐに来て、彼らは石に投げ込まれます。 このフレームワークは、より良いメッセージを生成するためのチェックを追加することがよくありますが、これはネットワーク上での高価なテストです。 Perfも機能です。

'C:\ inetpub \ wwwroot \ mysite \ images \ savehere \ mumble.jpg'のような名前を使用する必要があります。 確実にパス名を生成するには、 Path.Combine()を使用します。

Question

私はこの質問がここで何度も尋ねられたことを知っていますが、私の問題に対する解決策を見つけることはできません。 私は.net C#のフォルダに画像を保存しようとしていますが、この例外が発生します:

Access to the path 'C:\inetpub\wwwroot\mysite\images\savehere' is denied.The error occured at mscorlib because    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode)

私はnetwork serviceiis_iusrsにこのフォルダ(savehere)を完全に制御し、 everyone完全な制御権を与えeveryoneいても、この例外をiis_iusrs 。 私はエクスプローラ経由でIISマネージャー経由でアクセスしようとしましたが、まだ運がありません

私はWindows Server 2008 R2とIIS 7.5でこれをやっていますが、誰にアクセス権を与える必要がありますか?

ありがとう




  1. 設定を組み込みアカウントからカスタムアカウントに変更し、他のサーバーのユーザー名とパスワードを入力します。

  2. クラシックモードではなく、統合モードを維持します。




私はこの設定で解決した:

IIS>アプリケーションプール> [あなたのサイト]> [詳細設定]> [アイデンティティ]>組み込み関数> LocalSystem




私の場合は、IISでWebサイトの.NET Authorization Ruleを追加する必要がありました。

匿名ユーザーを許可するルールを追加しました。




書き込みしようとしていたファイルと同じ名前のディレクトリがあるので、人々もそれを調べることができます。




私はまったく同じ問題を抱えていました。

解決策は、読み込み専用のテンプレートファイルからコピーされたので、アクセスしようとしていたファイルが読み込み専用であることでした。

<facepalm />




次のヒント 、このスレッドの元の質問に対する答えではありませんが 、私はちょうど同じ愚かなミスをした後、このウェブページに終わるいくつかの他のユーザーに役立つ可能性があります...

私はASP.Net FileUploadコントロールを取得して、そのファイルを " 隠し共有 "を含むネットワークアドレスにアップロードしようとしていました。つまり、

\ MyNetworkServer \ c $ \ SomeDirectoryOrOther

私はそれを理解していませんでした。 Visual StudioでデバッグモードでWebページを実行した場合、正常に動作します。 しかし、プロジェクトが展開され、アプリケーションプールユーザー経由で実行されていたとき、このネットワークディレクトリを見つけることを拒否しました。

私はどのユーザーが私のIISサイトが実行されているかチェックしていましたが、このユーザーには " MyNetworkServer "サーバーなどのディレクトリに完全なアクセス許可を与えましたが、何も機能しませんでした。

理由は(もちろん!)管理者だけがこれらの隠しドライブシェアを「見る」ことができるからです。

私の解決策は、単に「普通」のシェアを作ることでした。

\ MyNetworkServer \ SomeDirectoryOrOther

これにより、「パスへのアクセス...拒否されました」というエラーが取り除かれました。 FileUploadはコマンドを正常に実行できました

fileUpload.SaveAs(networkFilename);

これは、私がやったのと同じミスをする他のユーザーに役立ちますように!

また、大きなファイル(4Mb以上)をアップロードする場合、IIS7ではweb.configファイルを2か所で変更する必要があります。 必要なことを読むには、このリンクをクリックしてください: ASP.Netで大きなファイルをアップロードする




トラブルシューティングのためにネットワークアプリケーションをアイデンティティとして新しいアプリケーションプールを作成し、作成した新しいアプリケーションプールをWebアプリケーションで使用してエラーが解消されないかどうかを確認してください。




Links