2010-12-09 72 views
0

使用C#,我得到一个SEHEXception每当我试图通过试图访问个人文件夹

Environment.GetFolderPath(Environment.SpecialFolder.Personal) 

的详细的异常要到我的个人文件夹的路径时,C#SEHException是:

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) 
    [...] 

没有InnerException。

有没有人有一个想法是什么错?例如,当我尝试获取系统路径时,问题不会发生。我正在使用Windows XP SP3和Visual Studio 2010. 另外,我有一个vista和VS2005的朋友尝试在他的机器上这样做,他没有得到这个异常。

回答

0

这只是一个预感,但是您有机会从MTA线程运行此代码吗?

我知道一些如果它们没有在STA中运行,Windows Shell API调用将会失败。真相被告知,当我在做PInvoke时,我只遇到过这个问题,但是这个调用堆栈跟踪中的原生SHGetFolderPath函数告诉我它可能就是它。

所以...为了测试我的理论,你可以尝试在Main中调用Environment.GetFolderPath(Environment.SpecialFolder.Personal)在一个简单的控制台应用程序,看看这个调用是否成功?

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

如果它在一个简单的虚拟应用程序失败,你的机器可能会搞砸了,或者只是用户的配置文件。我会尝试在机器上创建一个新用户,登录到他的帐户并从那里尝试。

编辑: 尝试一些方向:

  • 直视在注册表编辑器HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders和检查,如果一切看起来正常。
  • 检查事件查看器是否有其他东西在机器上损坏。
  • 重新启动机器...? :)
  • 重新安装.NET Framework
+0

该问题已经从简单的虚拟应用程序。试图用新创建的用户执行此操作也会产生相同的错误。 – Fynn 2010-12-09 21:21:24