現在ログインしているユーザーのお気に入りを取得しようとするC#コードがあります。このコードは、Windows Explorerプロセスにロードされるタスクバーツールバーの一部です。私は、ローミングプロファイルまたはフォルダリダイレクトが設定され有効になっているドメインでUACを有効にしたWindows Vistaを使用しているユーザーがいます。お気に入りパスでDirectory.GetDirectoriesを呼び出すと、 "System.IO.DirectoryNotFoundException:パス 'C:\ Users \\ Favorites \"の一部を見つけることができませんでした。移動プロファイルまたはフォルダリダイレクトのセットアップを持たない他のドメインの他のユーザーには、この問題はありません。DomainフォルダのリダイレクトによるEnvironment.SpecialFolder.FavoritesでDirectory.GetDirectoriesを呼び出すと、DirectoryNotFoundExceptionが発生する
また、失敗したログのパスを実行プロンプトにコピーするとパスが読み込まれないことが報告されていますが、エクスプローラを使用してパスに直接移動してそのパスをコピーして実行プロンプトに貼り付けると、 。彼は私に両方の道を送ってくれました。彼らはまったく同じものであり、まったく意味がありません。
これは、そのパスが実際にサーバー上の共有を指しているが、Directory.GetDirectoriesから返されたdirectoryInfoのサブディレクトリにアクセスしようとしたときにリダイレクトが失敗しているフォルダリダイレクトによって発生するというものです。初期ディレクトリは機能しますが、初期ディレクトリのすべてのサブディレクトリは正しくリダイレクトできません。
誰かがこのような状況に遭遇しましたか、リダイレクトされたフォルダに適切なアクセス権を得るための回避策を知っていますか?
private void GetFavorites()
{
try
{
System.IO.DirectoryInfo dirInfo = new System.IO.DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.Favorites));
AddFavorites(dirInfo);
}
catch
{
}
}
private void AddFavorites(DirectoryInfo dirInfo)
{
foreach (System.IO.FileInfo fileInfo in dirInfo.GetFiles("*.url"))
{
//string alias = fileInfo.Name.Replace(".url", "");
if (!ItemsBookmarks.ContainsKey(fileInfo.Name))
ItemsBookmarks.Add(fileInfo.Name, fileInfo.Name);
}
foreach (System.IO.FileInfo fileInfo in dirInfo.GetFiles("*.lnk"))
{
if (!ItemsBookmarks.ContainsKey(fileInfo.Name))
ItemsBookmarks.Add(fileInfo.Name, fileInfo.Name);
}
foreach (System.IO.DirectoryInfo objDir in dirInfo.GetDirectories())
{
AddFavorites(objDir);
}
}
おかげで、
ジョン