У меня есть веб-сайт 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 используется для создания запланированных задач.