【问题标题】:Environment.SpecialFolder.CommonApplicationData returning Program Files/App folderEnvironment.SpecialFolder.CommonApplicationData 返回 Program Files/App 文件夹
【发布时间】:2015-09-03 18:55:50
【问题描述】:

我开发了 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\Z\settings.config

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

我的问题:

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

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

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

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

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

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

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

提前谢谢你!

【问题讨论】:

    标签: c# wpf path environment-variables programdata


    【解决方案1】:

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

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

    【讨论】:

    • 我刚刚在 regedit 中检查了 USER 和 MACHINE 环境,但我没有在任何地方看到 CommonApplicatonData 或 ProgramDate 文件夹值的提及或定义。程序运行良好,它能够找到、读取和写入 programdata/app/ 文件夹。我说的是我的机器没有问题。我会在目标机器上检查它,但我假设注册表项是相同的。
    猜你喜欢
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    相关资源
    最近更新 更多