Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在XP和Server 2003上返回空字符串的GetFolderPath(…;CommonApplicationData)_C#_Windows Services_Environment Variables - Fatal编程技术网

C# 在XP和Server 2003上返回空字符串的GetFolderPath(…;CommonApplicationData)

C# 在XP和Server 2003上返回空字符串的GetFolderPath(…;CommonApplicationData),c#,windows-services,environment-variables,C#,Windows Services,Environment Variables,这似乎完全是随机发生的。程序运行了一分钟,然后我做了一些更改(与程序的这一部分完全无关,我实际更改的只是项目的一个嵌入式资源),下面的属性现在只返回一个“\” 在XP和Server 2003上,此属性应该并且始终返回C:\Documents and Settings\All Users\Application Data。这不再适用于在同一虚拟主机上运行的虚拟2003计算机和虚拟XP计算机。主机对这些环境变量没有任何影响,是吗?我的虚拟主机可能有问题吗?不幸的是,我没有一台可用的,独立的Serve

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

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

注意:我意识到这一部分本身不是一个编程问题,更多的是一个服务器问题,但由于问题其余部分的性质,我觉得它仍然适合,因此,如果我错了,请纠正我

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


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

该路径是否存在于您的计算机上,或者是否已被替换?根据报告:

如果操作系统不存在,文件夹将不存在 创建该文件夹、删除现有文件夹或该文件夹是虚拟文件夹 目录,例如我的计算机,它与 物理路径


这是您的情况吗?

请看一看谢谢Eddy。我有一点玩这个,但这似乎是一个单独的问题。我使用的环境变量应该由操作系统自动添加。我刚刚在同一虚拟主机上干净地安装了XP,测试结果完全相同。AFAIK Programdata是win2003/XP之后引入的一个文件夹。在win7上,env变量%CommonApplicationData%在旧系统(包括w2k3)上返回c:\programdata\是un c:\documents and settings。你能给我指一下任何一个文件吗?它说在任何windows平台上默认存在一个环境变量%PROGRAMDATA%?我检查了我的w2k3服务器实例,但它也不存在,但这就像你在vmI中运行时找不到说明它的文件一样,但是该软件已经在XP和2003上使用这个变量工作了一年多了。这一定与编译器有关,因为软件工作版本的旧exe文件仍然有效:/I不明白。这是唯一的答案,有些人没有解释就投了反对票。有什么好处?
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) + @"\"; }
}