当我执行此语句时:

string folderPath =
   Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments);

folderPath 设置为 C:\ProgramData

当我在立即窗口中执行此语句时:
Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments);
C:\Users\Public\Documents 显示(这是我所期望的)。

关于区别的任何想法?

2012 年 7 月 6 日更新:

我在同一个 exe 的不同类中得到不同的结果。

我有一个类存在于图书馆中,还有一个直接链接到应用程序中。

库类返回“C:\ProgramData”。
链接的代码返回“C:\Users\Public\Documents”。

此外,库代码返回“C:\ProgramData”
“Environment.SpecialFolder.CommonDocuments”和
“环境.SpecialFolder.ApplicationData”。

链接的代码为“Environment.SpecialFolder.CommonDocuments”返回“C:\Users\Public\Documents”,为“Environment.SpecialFolder.ApplicationData”返回“C:\Users\Me\AppData\Roaming”。

我很困惑。

最佳答案

如果您的程序是 64 位,则可能会发生这种情况。由于 Visual Studio 是 32 位的,当您在即时窗口中执行 Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments); 时,它​​会查找 Windows 32 配置单元,而您的程序将查找 64 配置单元。并且有可能是 CommonDocuments 文件夹被移动了,它只会在 64 hive 中注册。

这是 here 定义的 Windows 错误

编辑 您的更新说明它发生在同一个 EXE 中的两个类中。由于进程只能是 32 位或 64 位(不能同时是 32 位或 64 位),这表明上述错误不适用于您(假设程序集之间的正常通信,而不是带有包装器的 COM)。你能把它变成一个合适的测试,你可以发布吗?

作为快速确认,在每个中包含以下代码也可能是值得的,以双重确保它们都在同一进程中运行:

  Console.WriteLine("{0} Process {1} is {2}bit", GetType().ToString(), System.Diagnostics.Process.GetCurrentProcess().Id, IntPtr.Size * 8);

关于c# - 环境.SpecialFolder.CommonDocuments,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11355484/

10-12 12:37