Назад | Перейти на главную страницу

Почему мое приложение работает нормально вручную, но когда я запускаю его в Планировщике задач, возникает ошибка?

У меня есть приложение, которое очень хорошо работает на моем старом сервере Windows 2008 R2 в планировщике заданий. Он считывает данные из одной веб-службы, а затем записывает некоторые данные в другую веб-службу (поэтому ему требуется доступ к сети). Последние несколько лет он одинаково хорошо работает как в проводнике, так и в планировщике задач. Я запускаю процесс как администратор домена (для простоты).

Я работал над переносом приложения со старого сервера 2012 R2 на новый, и для этого потребовалось несколько изменений в коде, что неплохо. Однако я столкнулся с проблемой, которая меня полностью обманула.

Приложение теперь работает правильно, ЕСЛИ Я дважды щелкаю EXE в проводнике, и он выполняет свою работу. Однако, когда я пытаюсь запустить приложение в планировщике заданий, используя того же пользователя и настройки, что и на старом сервере, оно запускается в течение нескольких секунд, а затем останавливается (должно работать в течение 2 минут).

Я установил журнал аудита, и он ничего не показывает. Однако я вижу, что журнал приложений Windows показывает пару ошибок после завершения процесса:

Application: WebInterfacer.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Runtime.InteropServices.COMException
  at SHDocVw.IWebBrowser2.get_Busy()
  at WebInterfacer.Transferer.waitForIE(SHDocVw.InternetExplorer)
  at WebInterfacer.Transferer.setTimes(Int32, System.String, System.String, System.Collections.Generic.List`1<ZoneEvent>, SHDocVw.InternetExplorer, System.String ByRef)
  at WebInterfacer.Transferer.GetAndSetData(System.Collections.Generic.Dictionary`2<System.String,Double>, WebInterfacer.BookingService.Lists, System.String, System.String, System.String, Int32, System.String ByRef)
  at WebInterfacer.Transferer.Main(System.String[])

И второй:

Faulting application name: WebInterfacer.exe, version: 1.0.0.0, time stamp: 0x588f5ae8
Faulting module name: KERNELBASE.dll, version: 6.3.9600.18340, time stamp: 0x5736541b
Exception code: 0xe0434352
Fault offset: 0x00014878
Faulting process id: 0x2ae4
Faulting application start time: 0x01d27b2075396488
Faulting application path: C:\Program Files\Internal\Transferer\WebInterfacer.exe
Faulting module path: C:\Windows\SYSTEM32\KERNELBASE.dll
Report Id: b8a9ddf0-e713-11e6-80be-42f2e9a1fc19
Faulting package full name: 
Faulting package-relative application ID: 

Когда я добавил дополнительный код проверки ошибок, я получил: «Фильтр сообщений указал, что приложение занято. Ошибка HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER)». Почему он занят? Может быть, существует политика, которая не позволяет коду приложения взаимодействовать с IE в Windows 2012 R2 в оболочке?

Я установил запуск процесса независимо от того, вошел ли пользователь в систему или нет. Он настроен на работу с наивысшими разрешениями. То же самое в обеих версиях на двух разных серверах.

Мне интересно, что-то не так с SHDocVw.InternetExplorer и COM-объектом, но почему он не работает при запуске в планировщике задач, а не вручную?

Заранее спасибо

Здесь есть много возможных причин, по которым он может потерпеть неудачу.

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

Мое обоснованное предположение заключается в том, что код запускает IE и ждет его вывода. Среда в задачах, запускаемых из Планировщика, может отличаться, поэтому IE или какой-либо другой компонент не может работать должным образом, и поэтому возникает исключение.