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