使用任务管理器运行Win32Com错误

时间:2018-06-04 16:12:04

标签: python-2.7 scheduled-tasks win32com

我有一个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 :(得分:0)

你需要 1)在DCOMCnfg实用程序中为您正在运行的用户设置权限 - 或 - 2)将用户更改为您的桌面用户帐户。

但首先,您需要获取正确的错误代码,而不是通用消息。

请注意,这应该被视为临时解决方案,因为MS非常支持DCOM以实现自动化作为服务。考虑尽快切换到任何库。 Excel互操作存在许多问题:您必须不时重新启动服务器,随后的调用会导致性能下降,因为很有可能出现错误等,所以无法并行运行Excel ...

答案 1 :(得分:0)

我遇到了相同的错误,该错误可以从命令提示符运行,但不能从任务计划程序运行。

我通过任务计划程序中任务属性的这些设置解决了此问题: 1.常规->安全选项    一种。确保您用于运行python / microsoft程序的用户帐户相同。    b。选中“仅在用户登录时运行。    C。未选中的“隐藏”

对于1a,我使用的是用于登录笔记本电脑/ PC的DOMAIN \ userid。

这是我找到的才能使任务计划程序成功运行的唯一方法。希望这会有所帮助。