Понадобилось
на днях в планировщик добавить задачу на выполнение программы и столкнулся со
следующей ошибкой в системном журнале Windows:
EventID
10016
Параметры разрешений по
умолчанию не дают разрешения Локальный Активация для приложения COM-сервера с
CLSID
{0002DF01-0000-0000-C000-000000000046} и APPID Недоступен пользователю DOMAIN\User с SID (S-1-5-21-392298462-15684764-2655755672-2605) и адресом LocalHost (с использованием LRPC). Это разрешение безопасности можно изменить с помощью служебной программы управления службами компонентов. |
Поиск
по ID в реестре показал,
что данный идентификатор принадлежит объекту InternetExplorer.Application. Через оснастку DCOM (dcomcnfg) права дать не получилось, как это
обычно делается в подобных случаях, поскольку такого объекта там не оказалось.
Программа создаёт объект IE
и что-то там по ссылке проверяет, но при создании объекта, вываливается ошибка
о нехватке прав. Раньше задача запускалась с правами локального админа и всё
работало хорошо. Но косяк с лишними правами было решено исправить. В итоге, под
пользовательской учёткой и получили эту ошибку. Причём, если запускать программу вручную под
пользовательской учёткой также всё работает, но нам нужен запуск по расписанию.
Для
теста создал простенький скрипт на VBS, вызывающий IE и переходящий по ссылке в Интернете:
Set WshShell = WScript.CreateObject("WScript.Shell")
Set oIE = WScript.CreateObject("InternetExplorer.Application")
oIE.menubar = 1
oIE.toolbar = 0
oIE.statusbar = 0
'
Открываем пустую страницу
oIE.navigate
"about:blank"
'
Пауза. Без неё окно не ищется :(
wscript.sleep
10
'
Делаем окно видимым
oIE.visible
= 1
' Окно
на передний план
success = WshShell.appactivate("Пустая страница - Windows Internet Explorer")
' Максимизируем
if success then WshShell.sendkeys "% р"
'
Опять немного надо поспать
wscript.sleep
10
'
Открываем IE
oIE.navigate
"http://ya.ru"
'Меняем
заголовок окна, если нужно
'oIE.Document.Title
= "yandex"
|
И
запихал его в планировщик, проблема повторилась под пользовательской учёткой.
Под учёткой админа всё работает. Если запускать вручную всё работает в обоих
случаях. Ладно, дал права админа пользовательской учётке – проблема осталась.
Странно….
С
помощью ProcMon
отследить проблему не удалось L
В
общем, путём перебора различных вариантов выяснилось, что нужно первый раз запускать программу через
планировщик под учёткой с правами локального админа, а потом права можно забрать. Всё будет
работать. Если же первый раз создать объект IE через планировщик под учёткой с
пользовательскими правами, то потом какие права не давай, работать не будет.