2010-12-09 4 views
0

en utilisant C#, je me fais un SEHException chaque fois que j'essaie d'obtenir le chemin de mon dossier personnel viaC# SEHException lorsque vous essayez d'accéder au dossier personnel

Environment.GetFolderPath(Environment.SpecialFolder.Personal) 

L'exception détaillée est:

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

Il n'y a pas d'InnerException.

Quelqu'un a-t-il une idée de ce qui ne va pas? Le problème ne se produit pas lorsque j'essaie d'obtenir le chemin du système, par exemple. J'utilise Windows XP SP3 et Visual Studio 2010. En outre, j'ai eu un ami avec Vista et VS2005 essaye de le faire sur sa machine et il ne reçoit pas cette exception.

Répondre

0

Ceci est juste une intuition, mais par hasard courez-vous ce code à partir d'un thread MTA?

Je sais que certains appels API Windows Shell échoueront s'ils ne s'exécutent pas dans STA. À vrai dire, je n'ai jamais rencontré ce problème quand je faisais des trucs PInvoke, mais cet appel à la fonction native SHGetFolderPath dans votre trace de pile me dit que c'est peut-être ça.

Alors ... pour tester ma théorie, pouvez-vous essayer d'appeler Environment.GetFolderPath(Environment.SpecialFolder.Personal) depuis Main dans une application de console simple et de voir si cet appel réussit?

Si elle réussit dans une application fictive simple, alors peut-être que MTA est la cause de l'échec de votre application.

Si cela échoue dans une application fictive simple, votre machine est probablement foirée, ou peut-être juste le profil de l'utilisateur. Je voudrais essayer de créer un nouvel utilisateur sur la machine, connectez-vous à son compte et essayez à partir de là.

Edit: Essayant encore quelques directions:

  • Regardez directement HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders regedit et vérifier si tout semble normal.
  • Vérifiez Event Viewer si d'autres éléments sont endommagés sur l'appareil.
  • Redémarrez la machine ...? :)
  • Réinstaller .NET Framework
+0

Le problème était déjà d'une application factice simple. Essayer de le faire avec un nouvel utilisateur crée également la même erreur. – Fynn

Questions connexes