我有以下Python代码
o = win32com.client.Dispatch("Outlook.Application")
ns = o.GetNamespace("MAPI")
profile = ns.Folders.Item("Profile Name")
tasks = profile.Folders.Item("Tasks")
print tasks.Items
当我运行它时,脚本崩溃并出现以下错误:
Traceback (most recent call last):
File "start.py", line 47, in <module>
o = win32com.client.Dispatch("Outlook.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 108, in _GetGoodDispatchAndUserName
return (_GetGoodDispatch(IDispatch, clsctx), userName)
File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 85, in _GetGoodDispatch
IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
pywintypes.com_error: (-2146959355, 'Server execution failed', None, None)
我也尝试过:
win32com.client.gencache.EnsureDispatch("Outlook.Application")
不知道该怎么做以及问题是什么
更新:仅当 Outlook 正在运行时才会发生这种情况,但发出 getActiveObject 会崩溃并显示“操作不可用”
错误代码
-2146959355
是 CO_E_SERVER_EXEC_FAILURE
,这很可能意味着 Outlook 正在与您的进程不同的安全上下文中运行。任一应用程序是否以提升的权限运行(以管理员身份运行)?
您的代码何时以及如何运行?
2016 年 6 月 17 日更新: 只需发布评论中提到的解决方案即可更加明显:以普通用户身份或以提升的权限运行 Outlook 和 python 代码。
我遇到了同样的问题,我使用的是 Python 2.7 的 64 位安装。我重新安装了 32 位版本的 Python 2.7,并且能够使用客户端调度调用。
我也遇到同样的错误,
其背后的原因是应用程序上次调用 com 时没有正确退出或退出时出现一些错误。所以下次您无法调用它。
我已经关闭并重新打开 Outlook 并重新运行我的 py 代码,现在它运行良好。
使用这段代码可以避免将来出现此错误
fx = win32com.client.Dispatch('CimplicityME.Application')
try:
# do stuff
except:
fx.Quit()
对我有用的是在调用代码之前关闭 Outlook。不幸的是,我不明白为什么会这样......
尝试将脚本移动到另一个目录并从那里执行它。当我遇到这个问题时,它解决了这个问题,尽管我不确定问题的根本原因(正如 Nuno 所建议的,这似乎是 win32 API 的一个不起眼的错误)。
本周我也遇到了同样的错误,我的错误是因为我没有安装 Outlook。我以为我有,但我有“Outlook(新)”和“邮件和日历”,而不是真正的 Outlook。在我安装的那一刻,问题就消失了。