33

ディレクトリが存在するかどうかをチェックし、その中のファイルのリストを取得するコード行があります。

System.IO.Directory.Exists(@"\\Server\Folder\");

(ビジュアルスタジオから実行して)テストすると機能しますが、Webサイトを展開すると、常にfalseが返されます。

別のサーバー(たとえばServer2)の別のフォルダーに対して同じ検証を行い、正常に動作します。

それからアクセスの問題だと思いましたが、共有フォルダとネットワークはすべての人にアクセスできます...それが機能しない別の理由はありますか?

4

4 に答える 4

29

Visual Studioでコードを実行すると、ユーザーの権限の下で実行されます。

IISでコードを実行すると、アプリケーションプールのIDで実行されます。これは、デフォルトで組み込みユーザー「ネットワークサービス」であり、ローカルマシンの外部にアクセスできないローカルユーザーアカウントです。

ネットワーク共有の権限は最初の層であり、その後、ディレクトリのNTFS権限がチェックされます。

アプリケーションプールのIDを、ユーザーと同じ権限を持つドメインユーザーに変更する必要があります。

于 2012-04-17T18:30:12.660 に答える
6

少し遅れるかもしれませんが、このDirectoryクラスのメソッドに問題があることがわかりました。代わりに、私はDirectoryInfoこのようになりすましを使用しました:

new DirectoryInfo(path).Exists

このようにして、IT分野で否定されたID変更の問題全体を回避できます。

これが誰かに役立つことを願っています!

于 2016-03-30T14:32:46.250 に答える
2

今後の参考のために、これも機能します。

bool result = false;
try
{
    Directory.GetAccessControl(path);
    result = true;
}
catch (UnauthorizedAccessException)
{
    result = true;
}
catch
{
    result = false;
}
于 2016-05-02T10:30:11.350 に答える
0

このエラーは、次のようなUNCコードで発生していました。

@ "\ Server01 \ c $ \ Data \ SubFolder"

私は明示的な共有を行い、を取り除き、次のc$ように表示しました。

@ "\ Server01 \ TheData \ SubFolder"

そしてそれは働き始めました。

それがパーミッションの問題を修正したものであるかどうかは100%わかりませんが、変更を加えた直後に機能し始めました。

于 2018-12-06T01:57:36.510 に答える