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

时间:2015-06-18 08:30:14

标签: 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:找不到路径的一部分' C:\ Program Files(x86)\ CompanyName \ App \ X \ Y \ Z \ settings.config'。

哪里

  

X \ Y \Ž\的settings.config

应该是C:\ProgramData的一部分,但不知何故应用程序返回安装应用程序的文件夹(Program Files)。我试图在多台机器和环境中复制它,但没有运气。

我的问题:

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

我不知道为什么这个案例中的应用返回的文件夹不同于C:\ProgramData

如果有可能我可以检查Environment.SpecialFolder.CommonApplicationData除了程序化以外的值是什么?

任何建议或解决方案?

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

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

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

提前谢谢!

1 个答案:

答案 0 :(得分:0)

本文解释了注册表中的哪些位置可以检查是否已为此枚举设置了用户环境变量。

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