当我执行此语句时:
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/