Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData) возвращает String.Empty - PullRequest
4 голосов
/ 24 февраля 2012

У меня есть приложение asp.net mvc3.Теперь я хочу сохранить данные пользователя в

C: \ Users {AppPoolUserAccount} \ AppData \ Roaming \ MyProgramm ...

При первом вызове Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) i onlyполучить "" (String.Empty).При втором вызове Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) возвращает правильный путь ...

Примечание. Процедура находится в контексте входа в систему.Я хочу сохранить имя пользователя и sessionID в xml-файле, чтобы не допустить одновременной регистрации двух пользователей через одну учетную запись.

Почему?

Ответы [ 3 ]

6 голосов
/ 18 июля 2012

Environment.GetFolderPath возвращает пустые строки для большинства значений перечисления SpecialFolder, поскольку профиль пользователя, которого вы используете для запуска пула приложений, не загружен.

Необходимо настроить пул приложений для загрузки профиля пользователя. Для этого перейдите в «Диспетчер IIS»> «Пулы приложений»> «YourAppPool»> «Дополнительные параметры»> «Загрузить профиль пользователя» и установите значение «true» или откройте командную строку работает

appcmd set apppool "MyAppPool" -processModel.loadUserProfile:true

(обычно вы запускаете это в C: \ Windows \ SysWOW64 \ inetsrv).

Вот несколько ссылок с дополнительными данными:

0 голосов
/ 29 сентября 2016

Environment.GetFolderPath возвращает пустую строку по дизайну , если папка не существует .От MSDN :

Environment.GetFolderPath Метод (Environment.SpecialFolder)

Возвращаемое значение Тип: System.String

Путь куказанная системная специальная папка, если эта папка физически существует на вашем компьютере;в противном случае пустая строка ("").

Папка физически не будет существовать, если операционная система не создала ее, существующая папка была удалена или папка является виртуальным каталогом, таким как Мой компьютер,который не соответствует физическому пути.

0 голосов
/ 24 февраля 2012

Если вы хотите поделиться данными (например, с текущими зарегистрированными пользователями), попробуйте использовать этот код:

В global.asax при запуске приложения:

 var users = new List<Guid>();
 Application["loggedUsers"] = users;

Затем, если пользователь входит в систему, введите:

var users = (List<Guid>)Application["loggedUsers"];
users.Add(currentlyLoggingOnUserId);
Application["loggedUsers"] = users;
...