.NET создать запланированное задание на сервере не удается с E_ACCESSDENIED - PullRequest
3 голосов
/ 20 января 2009

У меня есть веб-сайт ASP.NET (на C #), который принимает данные пользователя, а затем пытается создать запланированное задание Windows. Конечно, это прекрасно работает на компьютере DEV, но не работает на сервере. Я пытаюсь выяснить, какие разрешения требуются пользователю ASPNET (или анонимному веб-пользователю) для создания задач.

Ошибка:

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) 
Stacktrace: 
    at MyScheduler.NewWorkItem(String TaskName, Guid& rclsid, Guid& riid, Object& obj) 
    at MyScheduler.CreateTask(String name)

Я провел некоторый поиск, и предлагаемое решение - использовать флаг «impersonate» web.config, чтобы заставить приложение работать как пользователь с достаточными разрешениями, в отличие от учетной записи ASPNET, которая может не иметь этих разрешений .

Пример:

<system.web>
    <identity impersonate="true" />
</system.web> 

К сожалению, похоже, это не решает проблему. Из документации, которую я прочитал, это должно работать как анонимный веб-пользователь, но, похоже, у пользователя недостаточно прав.

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

<system.web>
    <identity impersonate="true" userName="WindowsDomain\YourUserName" password="YourPassword" />
</system.web> 

Это позволило приложению успешно создать запланированное задание Windows. Итак, очевидно, что с правильным набором разрешений Windows 2003 я могу заставить приложение работать так же, как в среде разработки. Однако я не собираюсь помещать учетные данные пользователя учетной записи администратора сети или компьютера в виде простого текста в файл Web.config.

Кто-нибудь знает, какие именно разрешения необходимо установить, чтобы учетная запись ASPNET работала так, как нужно?

РЕДАКТИРОВАТЬ: Win32 API используется для создания запланированных задач.

Ответы [ 4 ]

1 голос
/ 20 января 2009

Вместо того, чтобы беспокоиться о разрешениях пользователей ASPNET, позволит ли ваш внутренний процесс создать учетную запись для конкретного компьютера и предоставить учетные данные там?

1 голос
/ 26 января 2009

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

  1. Добавьте <identity impersonate="true" /> в Web.config
  2. Добавьте пользователя IUSR (то есть пользователя, которого приложение будет запускать как использующего олицетворение) в группу «Операторы резервного копирования».

Это дает приложению доступ к папке «Запланированные задачи», чтобы они могли создавать и запускать задачу.

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

0 голосов
/ 10 марта 2009

Другой вариант - прошить биос на сервере

0 голосов
/ 20 января 2009

Ты что-то пишешь в журнал событий? Возможно, ваш компонент (который размещен в IIS, я полагаю?) Не имеет доступа к записи чего-либо в журнале событий.

Это всего лишь предположение. Некоторое время назад я столкнулся с подобной проблемой и решил ее следующим образом:

Нажмите

...