C#尝试访问个人文件夹时出现异常

C#尝试访问个人文件夹时出现异常,c#,exception,C#,Exception,使用C#,每当我试图通过 Environment.GetFolderPath(Environment.SpecialFolder.Personal) 具体的例外情况是: System.Runtime.InteropServices.SEHException was unhandled Message=External component has thrown an exception. Source=mscorlib ErrorCode=-2147467259 StackTra

使用C#,每当我试图通过

Environment.GetFolderPath(Environment.SpecialFolder.Personal)
具体的例外情况是:

System.Runtime.InteropServices.SEHException was unhandled
  Message=External component has thrown an exception.
  Source=mscorlib
  ErrorCode=-2147467259
  StackTrace:
    at Microsoft.Win32.Win32Native.SHGetFolderPath(IntPtr hwndOwner, Int32 nFolder, 
                               IntPtr hToken, Int32 dwFlags, StringBuilder lpszPath)
    at System.Environment.GetFolderPath(SpecialFolder folder, 
                                                      SpecialFolderOption option)
    at System.Environment.GetFolderPath(SpecialFolder folder)
    [...]
没有例外

有人知道怎么回事吗?例如,当我尝试获取系统路径时,问题不会出现。我正在使用WindowsXPSP3和VisualStudio2010。
另外,我有一位vista和VS2005的朋友尝试在他的机器上执行此操作,但他没有遇到此异常。

这只是一种预感,但您是否从MTA线程运行此代码

我知道,如果某些Windows Shell API调用没有在STA中运行,它们将失败。说实话,我只在做PInvoke的时候遇到过这个问题,但是对堆栈跟踪中的本机
SHGetFolderPath
函数的调用告诉我可能就是这个问题

所以。。。为了验证我的理论,您能否尝试在一个简单的控制台应用程序中从
Main
调用
Environment.GetFolderPath(Environment.SpecialFolder.Personal)
,看看这个调用是否成功

如果它在一个简单的虚拟应用程序中成功,那么MTA可能是导致应用程序失败的原因

如果它在一个简单的虚拟应用程序中失败,那么您的机器可能是一团糟,或者可能只是用户的个人资料。我会尝试在机器上创建一个新用户,登录到他的帐户,然后从那里尝试

编辑: 尝试更多方向:

  • 直接查看Regedit中的
    HKEY\u CURRENT\u USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell文件夹
    ,检查一切是否正常
  • 如果计算机上的其他内容已损坏,请检查事件查看器
  • 重新启动计算机…?:)
  • 重新安装.NET Framework

问题已经来自一个简单的虚拟应用程序。尝试对新创建的用户执行此操作也会产生相同的错误。