Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) возвращает String.Empty

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

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

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

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

Зачем?

3 ответа

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

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

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

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

Вот пара ссылок с большим количеством данных:

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

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

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

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

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

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

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

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

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

var users = (List<Guid>)Application["loggedUsers"];
users.Add(currentlyLoggingOnUserId);
Application["loggedUsers"] = users;
Другие вопросы по тегам