Ошибка Win32Com при работе с диспетчером задач - PullRequest
0 голосов
/ 04 июня 2018

У меня есть скрипт на python, который вызывает открытие файла Excel, вызывает макрос в файле, а затем закрывает.Если я запускаю файл из CLI, он работает.Если я помещаю его в планировщик задач, я получаю сообщение об ошибке от win32com.

Метод открытия файла Excel:

import win32com.client as WinCom

if os.path.exists(reportGeneratorFileName):
    try:
        xl = WinCom.Dispatch("Excel.Application")
        xl.Workbooks.Open(Filename=os.path.abspath(reportGeneratorFileName))
        xl.Application.Visible = False
        xl.Application.Run("'{}'!Runner.Runner".format(reportGeneratorFileName))
        l.info('Start Sleeping')
        # Async mode of pythonw causes this to finish before the file is made
        time.sleep(300)
        l.info('Done Sleeping')
        xl.Application.Quit()
    except Exception as e:
        l.error('Error updating file')
        l.error(e, exc_info=True)

Это ошибка, которую я получаю:

06/04/2018 06:56:19 AM ERROR: (-2146959355, 'Server execution failed', None, None)
Traceback (most recent call last):
  File "LAW Report.py", line 846, in createReport
xl = WinCom.Dispatch("Excel.Application")
  File "c:\python27\lib\site-packages\win32com\client\__init__.py", line 95, in Dispatch
dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
  File "c:\python27\lib\site-packages\win32com\client\dynamic.py", line 114, in _GetGoodDispatchAndUserName
return (_GetGoodDispatch(IDispatch, clsctx), userName)
  File "c:\python27\lib\site-packages\win32com\client\dynamic.py", line 91, in _GetGoodDispatch
IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
com_error: (-2146959355, 'Server execution failed', None, None)

Теперь я использую 64-битный Python 2.7 и 64-битный win32com, а офис 32-битный, но, как я сказал выше, если я просто запускаю скрипт из CLI, он работает нормально, но не из диспетчера задач.Я использую это на Windows Server 2012R2.Я попытался настроить задачу для 2008, 2008r2 и 2012r2.Я также пытался с самыми высокими привилегиями.Мне нужно, чтобы это работало независимо от того, вошел ли пользователь в систему или нет.Каждый раз, когда я проверял, пользователь вошел в систему.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

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

Я решил эту проблему с помощью следующих настроек свойств задачи в планировщике задач: 1. Общие -> Параметры безопасности a.убедитесь, что вы используете ту же учетную запись, которую использовали для запуска программы python / microsoft.б.проверил "Запускать только когда пользователь вошел в систему. c. снят флажок" Скрытый "

Для 1а я использую DOMAIN \ userid, который использовался для входа в систему моего ноутбука / ПК.

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

0 голосов
/ 04 июня 2018

Вам необходимо 1) настроить разрешения в утилите DCOMCnfg для пользователя, под которым вы работаете, или 2) сменить пользователя на учетную запись пользователя на рабочем столе.

Но сначала вам нужно получить правильный код ошибки,не универсальное сообщение.

Обратите внимание, что это следует рассматривать как временное решение, так как DCOM плохо поддерживается MS для автоматизации в качестве службы.Рассмотрите возможность переключения на любую библиотеку как можно скорее.Взаимодействие с Excel связано с многочисленными проблемами: вам придется время от времени перезагружать сервер, снижать производительность при последующих вызовах, вы не можете запускать Excels параллельно из-за высокой вероятности ошибок и т. Д. *

...