【问题标题】:Environment.GetFolderPath(Environment.SpecialFolders.ApplicationData) returns C:Environment.GetFolderPath(Environment.SpecialFolders.ApplicationData) 返回 C:
【发布时间】:2013-11-15 03:05:06
【问题描述】:

我在我的一个客户的计算机上遇到了一个非常奇怪的行为,我找不到任何关于它发生原因的线索: 当应用程序调用Environment.GetFolderPath(Environment.SpecialFolders.ApplicationData) 返回值将是C:

这当然是错误的,他的 AppData 目录是通常的C:\Users\.....\AppData\Roaming,而他的变量%APPDATA% 正是指向那个目录。

谁能解释为什么会发生这种情况?

编辑:代码...

LogFilePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\ReportsAddin";
if (!Directory.Exists(LogFilePath) && Properties.Settings.Default.Logging == true)
{
    try
    {
        Directory.CreateDirectory(LogFilePath);
    }
    catch (Exception ex)
    {
        // ...
    }
}

然后抛出的异常表示它无法创建由空白字符串或空格组成的目录。调查一些输出显示从该调用返回的 AppData 文件夹是 C:,而实际上它应该是用户真正的 AppData 文件夹。

【问题讨论】:

  • 尝试查看这篇文章:stackoverflow.com/questions/3943626/…
  • 请将获取路径的代码以及任何代码放置到您评估实际路径的位置。在我看来,字符串只是无意中被修改了。
  • 感谢您的参考,但我怀疑它是否适用于此,没有使用 IIS。客户端正在运行 Windows 8 x64,就像我一样,她只使用 Office 2010 32 位。顺便说一句,该应用程序是一个 Excel 插件。
  • 您的程序在哪个帐户下运行?
  • 好的,我编辑了原始帖子,其中包含为该特定用户引发错误的部分代码。

标签: c# environment-variables appdata


【解决方案1】:

Environment.SpecialFolder.ApplicationData 标识的文件夹的实际路径取决于当前用户(启动程序的用户)。

确保程序在存在 ApplicationData 文件夹的用户帐户下运行。 如果您的程序在例如下运行一个本地系统帐户,您可能想使用另一个目录。

您可以使用Environment.SpecialFolder.CommonProgramFilesEnvironment.SpecialFolder.CommonProgramFilesX86 代替Environment.SpecialFolder.ApplicationData

【讨论】:

  • 我知道当前用户和她的 %APPDATA% 指的是一个有效的目录。我将以哪种方式验证该特定用户的 ApplicationData 文件夹确实存在? (除了检查 %APPDATA% 变量和路径)我想避免更改应用程序的文件夹以使其在一台计算机上运行,​​因此很高兴欢迎实际的解决方案。不过你是对的,我可以通过使用这些文件夹来规避它。但是,这将使其无法适应其他用户的需求。
猜你喜欢
  • 2012-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 2011-04-26
  • 2011-10-26
  • 1970-01-01
  • 2011-10-25
相关资源
最近更新 更多