当文件夹重定向处于活动状态时解析“Environment.SpecialFolder.Personal”

Posted

技术标签:

【中文标题】当文件夹重定向处于活动状态时解析“Environment.SpecialFolder.Personal”【英文标题】:Resolving 'Environment.SpecialFolder.Personal' when Folder Redirection is active 【发布时间】:2010-09-22 02:45:33 【问题描述】:

默认情况下,我们的 Windows 窗体应用程序将数据文件保存在用户的“我的文档”文件夹(在 XP 上)或“文档”文件夹(在 Vista 上)。我们通过调用来查找这个位置:

Environment.GetFolderPath( Environment.SpecialFolder.Personal )

我们确信这对于个人文件夹位于本地磁盘上的用户非常有用。我们不确定的是那些对其个人资料/个人数据文件夹有效的文件夹重定向的域用户。

我的问题是:无论文件夹重定向是否处于活动状态,上述调用是否都能正确解析?

我没有环境来测试这一点,而且我无法找到任何明确的确认方式。

【问题讨论】:

【参考方案1】:

是的。您可以通过更新文件夹的相应注册表项来自行测试。往下看……

\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\

【讨论】:

我知道更改“我的文档”文件夹的目标将更新此注册表项(因此,Environment.SpecialFolder 调用将正常工作)。但是文件夹重定向的工作方式是否相同?【参考方案2】:

我有一个用户在我的文档被重定向到网络(它转到驱动器 O)的 XP 机器上调用 Environment.GetFolderPath(Environment.SpecialFolder.Personal) 时报告了以下错误:

System.ArgumentException: Absolute path information is required.
   at System.Security.Util.StringExpressionSet.CreateListFromExpressions(String[] str, Boolean needFullPath)
   at System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess access, AccessControlActions control, String[] pathListOrig, Boolean checkForDuplicates, Boolean needFullPath, Boolean copyPathList)
   at System.Security.Permissions.FileIOPermission..ctor(FileIOPermissionAccess access, String path)
   at System.Environment.GetFolderPath(SpecialFolder folder, SpecialFolderOption option)
   at System.Environment.GetFolderPath(SpecialFolder folder)

我还没有直接访问此机器配置,但根据谷歌搜索和用户的帮助,我认为重定向缺少尾随 \(例如 O: 而不是 O:\)。

所以我相信答案是不,它不会每次都正确解决

【讨论】:

【参考方案3】:

我希望它确实如此。 Environment.GetFolderPath 和底层 SHGetSpecialFolderPath 的文档没有给出任何迹象表明它不能正确解析,我也找不到任何你会使用它的地方。

【讨论】:

以上是关于当文件夹重定向处于活动状态时解析“Environment.SpecialFolder.Personal”的主要内容,如果未能解决你的问题,请参考以下文章

FCM点击应用处于后台状态时如何打开用户指定的活动而不是默认活动

FCM 点击如何在应用程序处于后台状态时打开用户指定的活动而不是默认活动

当特定的弹簧配置文件处于活动状态时,如何防止运行测试?

批处理重定向符>前有数字(数字与>之间没有空格)是为啥会提示ECHO处于关闭状态呢?

根据 url 路径重定向到不同的服务器

解析器抛出错误时的 GraphQL 重定向