Неправильный путь, возвращаемый Environment.GetFolderPath (Environment.SpecialFolder.ApplicationFolder) в IIS6 WebService - PullRequest
2 голосов
/ 15 октября 2010

На моей тестовой машине (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:

  1. myUserName принадлежит группе IIS_WPG (даже попробовал Admin)
  2. вызов Environment.UserName правильно возвращает myUserName
  3. вызов Environment.GetFolderPath (Environment.SpecialFolder.LocalApplicationData); также возвращает путь «Пользователь по умолчанию», аналогично с DesktopDirectory
  4. вошел в систему как myUserName и гарантировал, что C: \ Documents and settings \ myUserName существует
  5. работает точно такой же код в .net-приложении на Windows 2003, это работает и возвращает правильный путь.

Я сбит с толку, это происходит только при запуске под IIS6. Это похоже на то, что он думает, что звонок поступает от Сетевой службы или Локальная система пользователей, и он не проверяет личность, выполняющую пул приложений.

Между прочим, когда я смотрю на Procmon и наблюдаю за приложением C ++, которое вызывается из веб-службы, у него нет такой проблемы при чтении и записи в C: \ Documents and settings \ myUserName \ ApplicatonData , это не кажется чтобы иметь проблему, возможно, он строит путь по-другому.

Я начинаю думать, что это может быть ошибка в .NET ??

Спасибо.

Том Делофорд

Ответы [ 2 ]

1 голос
/ 17 октября 2010

решаемая. По-видимому, это «специально», потому что IIS6 не загружает настройки профиля пользователя.

Microsoft посоветовала мне перейти на IIS7 или сначала вызвать LoadUserProfile, и мне интересно, что побудило их изменить эту функциональность с IIS5.1.

http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/890fa85a-b11a-4fbe-a333-cbe69abd72a7

В любом случае, извлеченный урок, не думайте, что функциональность не была удалена, и всегда тестируйте на одном сервере приложений, даже если это раздражает ИТ-отдел!

0 голосов
/ 15 октября 2010

Да.это не ошибкаПод каким пользователем запускается пул приложений ??

Давайте немного разберём это:

Тестовая машина использует IIS для размещения службы или встроенного веб-сервера?Если вы используете встроенный веб-сервер, он работает под вашим пользователем.Если вы используете IIS, какой из них является пользователем пула?

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

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) 

в порядке.

Вы должны изменить пользователя пула (и перезапустить пул), чтобы увидеть это изменение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...