【发布时间】:2021-12-22 08:57:10
【问题描述】:
可以从 Python 脚本中访问一个正在运行的 EA 实例,例如:
from win32com import client
eaApp = client.GetActiveObject("EA.App")
eaRepo = eaApp.Repository
但是,这似乎总是返回第一次启动的实例的 COM 对象。
假设我们有一个脚本需要启动一个新的 EA 实例。它通过调用os.startfile(eapxFile) 来实现,其中eapxFile 是一个空EA 文件的路径。然后它应该导入一些需要访问 COM 对象的 XMI 文件。
同时,还有几个其他(较旧的)EA 实例处于打开状态。 EA新实例的COM对象如何获取?
注意: 如果可以立即访问其 COM 对象,则启动 EA 新实例的另一种方法当然也是可行的。甚至可以直接使用 COM 接口。最重要的是,不能使用其他运行的EA实例。
【问题讨论】:
-
我不明白。如果您启动一个新实例,那么您已经拥有了 COM 对象,不是吗?不需要获取特定的运行实例。
-
@GeertBellekens 我猜他想从多个正在运行的实例中选择某个实例。我个人在所有情况下只处理一个 EA 实例。对我的脚本的简单要求。
-
@GeertBellekens 我通过调用 EA 可执行文件启动了新实例。
-
基本上,如果有办法为新创建的 EA 实例获取 COM 对象,那就太棒了。我尝试使用
DispatchEx来获取此处提到的“新”COM 对象:stackoverflow.com/questions/18648933/… 但这似乎冻结了我的脚本。 -
@AnandSowmithiran 这正是 not 发生的情况。如果没有,Dispatch 最终会创建一个实例。但否则它会返回已经运行的那个并且不创建一个新的。
标签: python scripting com win32com enterprise-architect