2010-12-09 6 views
0

Mit C# zuzugreifen versuchen, erhalte ich eine SEHException wenn ich versuche, überC# SEHException, wenn persönliche Ordner

Environment.GetFolderPath(Environment.SpecialFolder.Personal) 

Die detaillierte Ausnahme den Weg zu meinem persönlichen Ordner zu erhalten ist:

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

Es gibt keine InnerException.

Hat jemand eine Idee, was ist los? Das Problem tritt nicht auf, wenn ich beispielsweise versuche, den Systempfad zu ermitteln. Ich benutze Windows XP SP3 und Visual Studio 2010. Auch hatte ich einen Freund mit Vista und VS2005 versuchen, dies auf seiner Maschine zu tun, und er bekommt diese Ausnahme nicht.

Antwort

0

Dies ist nur eine Ahnung, aber führen Sie diesen Code bei einem MTA-Thread aus?

Ich weiß, dass einige Windows Shell API-Aufrufe fehlschlagen, wenn sie nicht in STA ausgeführt werden. Um ehrlich zu sein, habe ich dieses Problem immer nur beim PInvoke-Kram kennengelernt, aber dieser Aufruf an die native SHGetFolderPath-Funktion in Ihrem Stack-Trace zeigt mir, dass es nur so sein kann.

Also ... um meine Theorie zu testen, können Sie versuchen, Environment.GetFolderPath(Environment.SpecialFolder.Personal) von Main in einer einfachen Konsolenanwendung aufrufen und sehen, ob dieser Anruf erfolgreich ist?

Wenn es in einer einfachen Dummy-Anwendung erfolgreich ist, dann ist möglicherweise MTA die Ursache für Fehler in Ihrer App.

Wenn es in einer einfachen Dummy-Anwendung fehlschlägt, ist Ihr Computer wahrscheinlich versaut, oder vielleicht nur das Profil des Benutzers. Ich würde versuchen, einen neuen Benutzer auf dem Computer zu erstellen, sich an seinem Konto anzumelden und von dort aus zu versuchen.

Edit: Der Versuch, einige weitere Richtungen:

  • Blick direkt auf HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders in Regedit und überprüfen, ob alles normal aussieht.
  • Überprüfen Sie die Ereignisanzeige, wenn andere Dinge auf dem Computer beschädigt sind.
  • Maschine neu starten ...? :)
  • .NET Framework neu installieren
+0

Das Problem wurde bereits von einer einfachen Dummy-Anwendung. Der Versuch, dies mit einem neu erstellten Benutzer zu tun, führt ebenfalls zu demselben Fehler. – Fynn