c# - Environment.SpecialFolder.CommonApplicationData 返回 Program Files/App 文件夹

标签 c# wpf path environment-variables programdata

我开发了 WPF 应用程序 (.NET 4.5),它在 CommonApplicationData 文件夹中存储了一些配置文件。

为此,我使用了以下内容:

string AppDataFolder = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);

我还将公司名称/产品文件夹附加到该路径,99.9% 一切正常。应用程序能够在那里写入配置并读取它。应用程序主要用于 Win7 和 Win8 机器,但我从客户那里收到报告,其中一台机器出现一些错误(Windows 7 Pro、.Net 4.5)。

当我尝试调试问题时,我在日志中发现了以下内容:

System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Program Files (x86)\CompanyName\App\X\Y\Z\settings.config'.

在哪里

X\Y\Z\settings.config

应该是 C:\ProgramData 的一部分,但应用程序以某种方式返回安装该应用程序的文件夹(Program Files)。我试图在多台机器和环境中复制它,但没有成功。

我的问题:

是否可以更改 Windows 中的 Environment.SpecialFolder.CommonApplicationData 位置?这是一些安全问题(组策略)吗?也许有人以某种方式改变了路径。

我不知道为什么在这种情况下应用返回的文件夹与C:\ProgramData

如果我可以在哪里检查 Environment.SpecialFolder.CommonApplicationData 的值是什么,除了程序化?

有什么建议或解决方案吗?

我总是可以做一些 if 检查并尝试查看路径是否错误而不是手动更正它,但这样做听起来不太好。

我一直认为使用 Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) 会给我独立于操作系统版本的正确文件夹。

我尝试以完全管理员权限运行应用程序(加上以管理员身份运行),问题是一样的。应用程序从 Environment.SpecialFolder.CommonApplicationData 获取错误路径。

提前致谢!

最佳答案

本文介绍了您可以在注册表中的哪个位置检查以查看是否已为此枚举设置了用户环境变量。

https://msdn.microsoft.com/en-us/library/system.environmentvariabletarget(v=vs.110).aspx

关于c# - Environment.SpecialFolder.CommonApplicationData 返回 Program Files/App 文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30910224/

相关文章:

bash - 在 Red Hat 5 中为 'ROOT' 设置 PATH

c# - 如何更改 Wpf AdornerLayer 子项的 z 顺序?

c# - WPF UI Automation with .NET 4.5 with Prism 和 MVVM with Click Once App 便于非开发人员使用

c# - 您可以从系统中获取默认文件夹的打开/关闭图标而没有实际路径吗?

wpf - 以编程方式将资源字典保存到磁盘

java - 在 Linux 中为 Java 设置路径

c# - 使用新的 Unity VideoPlayer 和 VideoClip API 播放视频

c# - 如何获取 Windows 窗体上 PictureBox 的左上角屏幕坐标

c# - 将 linq 查询转换为 ObservableCollection

c# - 无法在 MVC 应用程序中获取项目目录路径