2
var di = new DirectoryInfo(Root);
var diList = di.GetDirectories();

上記は、ネットワーク上にあるテキスト パス 'Root' にアクセスするとクラッシュします。I は、ユーザーが最初に Windows 7 にログインしたときにのみ発生します (他の OS ではテストされていません)。ユーザーが Windows エクスプローラーを使用して指定されたパスに移動すると、di はディレクトリを取得できます。

Windowsエクスプローラーを開いてパスに移動するリンクをクリックするようにキャッチしてユーザーに促すことはできますが、回避策はありません。Windows エクスプローラーで最初にネットワーク パスへの接続を確立しなくても、プログラムでネットワーク パスへの接続を確立できるようにしたいと考えています。

例外:

System.IO.IOException: The network name cannot be found.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileSystemEnumerableIterator`1.CommonInit()
at System.IO.FileSystemEnumerableIterator`1..ctor(String path,string originalUserPath,
  String searchPattern, SearchOption searchOption, SearchResultHandler`1 resultHandler,
  Boolean checkHost)
at System.IO.DirectoryInfo.InternalGetDirectories(String searchPattern,
 SearchOption searchOption) at Controls.ValidationControl.LoadDBox(Object sender,
 RoutedEventArgs e)
in c:\Controls\ValidationControl.xaml.cs:line 1010

ジョン、ご支援ありがとうございます

4

3 に答える 3

1

最も可能性の高い理由は、ユーザーがネットワーク パスにアクセスするためにログインする必要があることです。経由でパスにアクセスするまで、これは発生しないようですExplorer。ネットワーク フォルダをローカル マシンのドライブとしてマッピングし、自動的にログインするように設定してみてください。これはそれを助けるかもしれません。

編集:-別の回答でスコッティが指摘したように、プログラムを実行する資格情報には、共有フォルダーへのアクセスも必要になる場合があります。

EDIT#2:-P/Invoke Credentials [Ref]を渡すために使用できます。または、ここでLogonUser説明されているように、偽装を行うメソッドを呼び出すことができます。なりすましに関する詳細については、この質問とその回答を参照してください。LogonUser

于 2013-07-11T00:28:29.420 に答える