views:

340

answers:

0

I have some C# code that tries to get the Favorites for the currently logged in user. The code is part of a Taskbar Toolbar that gets loaded into the Windows Explorer process. I have a user who is using Windows Vista with UAC enabled on a domain that either has Roaming Profiles or Folder Redirection setup and enabled. When calling Directory.GetDirectories on the Favorites path, it throws "System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\\Favorites\". Other users on other domains that do not have Roaming Profiles or Folder Redirection setup do not have this issue.

The user also reported that copying the path from the failed logs into the run prompt fails to load the path, but if they navigate to the path directly using explorer and then copy and paste that path into the run prompt, it works. He sent me both paths and they are exactly identical which doesn't make any sense at all.

My theory is that this is caused by the Folder Redirection where that path is actually pointing to a share on the server but the redirection is failing when trying to access the subdirectories (of the directoryInfo returned from Directory.GetDirectories). The initial directory works but all subdirectories of the initial directory fail to redirect correctly.

Has anyone come across a situation like this and/or know a workaround to gain proper access to redirected folders?

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);
        }
    }

Thanks,

John