Environment.GetFolderPath(...CommonApplicationData) 在 XP 和 Server 2003 上返回空字符串

Posted

技术标签:

【中文标题】Environment.GetFolderPath(...CommonApplicationData) 在 XP 和 Server 2003 上返回空字符串【英文标题】:Environment.GetFolderPath(…CommonApplicationData) returning Empty string on XP and Server 2003 【发布时间】:2011-10-25 02:56:35 【问题描述】:

这似乎完全是随机发生的。一分钟程序正在运行,然后我进行了一些更改(与程序的这一部分完全无关,我实际更改的只是项目的嵌入式资源之一),以下属性现在只返回一个"\"

public static string ProgramDataDir

    //this has always worked on all windows OSes before, but all of a sudden, not so
    //get  return Environment.GetEnvironmentVariable("ProgramData") + @"\"; 

    //I've tried changing it to this, and this doesn't work either - same results
    get  return Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + @"\"; 

在 XP 和 Server 2003 上,该属性应该并且始终返回 C:\Documents and Settings\All Users\Application Data。这不再适用于在同一虚拟主机上运行的虚拟 2003 机器和虚拟 XP 机器。主机对这些环境变量没有任何影响吗?会不会是我的虚拟主机有问题?不幸的是,我没有可用的独立 Server 2003 或 XP 机器来安装此软件并运行测试。

注意:我意识到这部分不是编程问题,更多的是服务器问题,但由于其余问题的性质,我觉得它仍然适合所以,如果我'我错了。

另外,我有一段时间没有接触这个项目了,我很确定我没有更改任何设置,除了程序集版本号,但我不知道也不记得我是否改变了最后一个工作版本之后的任何编译设置或类似设置。这些设置中的任何一个都会对我的应用程序产生这种影响吗?

应用程序作为 Windows 服务运行,因此使用任何用户特殊文件夹都不适合此应用程序。

【问题讨论】:

看看***.com/questions/305870/… 谢谢艾迪。我对此有点兴趣,但这似乎是一个单独的问题。我使用的环境变量应该由操作系统自动添加。我刚刚在同一虚拟主机上全新安装 XP 对其进行了测试,结果完全相同。 AFAIK Programdata是win2003/xp之后引入的文件夹。在 win7 上,环境变量 %CommonApplicationData% 在包括 w2k3 在内的旧系统上返回 c:\programdata\ 是指向 c:\documents 和设置的某处。你能指出我在任何文档中说默认情况下在任何 Windows 平台上都存在环境变量 %PROGRAMDATA% 吗? 我检查了我的 w2k3 服务器实例,它也不存在,但这就像你在 vm 中运行的一样 我找不到说明它的文档,但是该软件已经在 XP 和 2003 上使用该变量一年多了。它必须与编译器有关,因为该软件工作版本的旧 exe 文件仍然有效:/ 【参考方案1】:

您的机器上是否存在该路径,或者是否已被替换?根据documentation for Environment.GetFolderPath:

如果操作系统不存在,文件夹将不会实际存在 创建它,现有文件夹已被删除,或者该文件夹是虚拟的 目录,例如我的电脑,它不对应于 物理路径。

你会遇到这种情况吗?

【讨论】:

我不明白。这是唯一的答案,一些旋钮没有解释就否决了它。什么给了?

以上是关于Environment.GetFolderPath(...CommonApplicationData) 在 XP 和 Server 2003 上返回空字符串的主要内容,如果未能解决你的问题,请参考以下文章

WPF 创建桌面快捷方式

DateTimeCheck

C# 播放声音

如何获取当前用户目录?

从sqlite填充数据集

winfrom 错误笔记