На моей тестовой машине (Windows XP, IIS5.1) следующий код выполняется в C # .NET WebService (.SVC) под пользовательским идентификатором процесса (используя machine.config для указания пользователя)
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
правильно возвращает
c:\Documents and Settings\myUserName\Application Data
Однако на компьютере с Windows 2003 (Terminal Services), на котором запущен IIS6 и выполняется тот же код, но теперь используется ApplicationPool для указания идентификатора процесса, который возвращает метод:
c:\Documents and Settings\Default User\Application Data
Вещи, которые я проверял во время работы на компьютере с Win2003 / IIS6:
- myUserName принадлежит группе IIS_WPG (даже попробовал Admin)
- вызов Environment.UserName правильно возвращает myUserName
- вызов Environment.GetFolderPath (Environment.SpecialFolder.LocalApplicationData); также возвращает путь «Пользователь по умолчанию», аналогично с DesktopDirectory
- вошел в систему как myUserName и гарантировал, что C: \ Documents and settings \ myUserName существует
- работает точно такой же код в .net-приложении на Windows 2003, это работает и возвращает правильный путь.
Я сбит с толку, это происходит только при запуске под IIS6. Это похоже на то, что он думает, что звонок поступает от Сетевой службы или Локальная система пользователей, и он не проверяет личность, выполняющую пул приложений.
Между прочим, когда я смотрю на Procmon и наблюдаю за приложением C ++, которое вызывается из веб-службы, у него нет такой проблемы при чтении и записи в C: \ Documents and settings \ myUserName \ ApplicatonData , это не кажется чтобы иметь проблему, возможно, он строит путь по-другому.
Я начинаю думать, что это может быть ошибка в .NET ??
Спасибо.
Том Делофорд