C # SEHException при попытке доступа к личной папке - PullRequest
0 голосов
/ 09 декабря 2010

Используя C #, я получаю исключение SEHEXception, когда пытаюсь получить путь к своей личной папке через

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

Нет InnerException.

Кто-нибудь знает, что не так?Проблема не возникает, когда я пытаюсь получить системный путь, например.Я использую Windows XP SP3 и Visual Studio 2010. Кроме того, у меня был друг с Vista и VS2005, которые пытались сделать это на своем компьютере, но он не получил этого исключения.

1 Ответ

0 голосов
/ 09 декабря 2010

Это всего лишь догадка, но случайно вы запускаете этот код из потока MTA?

Я знаю, что некоторые вызовы Windows Shell API завершатся неудачно, если они не выполняютсяв СТА.По правде говоря, я когда-либо сталкивался с этой проблемой, когда делал вещи PInvoke, но этот вызов нативной функции SHGetFolderPath в вашей трассировке стека говорит мне, что это может быть просто.

Итак ...чтобы проверить мою теорию, можете ли вы попробовать вызвать Environment.GetFolderPath(Environment.SpecialFolder.Personal) из Main в простом консольном приложении и посмотреть, успешно ли этот вызов?

Если он преуспел в простом фиктивном приложении, то, возможно, MTA является причинойсбой в вашем приложении.

Если в простом фиктивном приложении произойдет сбой, возможно, ваша машина испорчена или, возможно, просто профиль пользователя.Я попытался бы создать нового пользователя на компьютере, войти в свою учетную запись и попробовать оттуда.

Редактировать: Пытаться еще несколько направлений:

  • Смотрите прямона HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders в Regedit и проверьте, все ли выглядит нормально.
  • Проверьте Event Viewer, если другие вещи повреждены на машине.
  • Перезагрузите машину ...?:)
  • Переустановите .NET Framework
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...