win32com发送32位版本的TestStand

时间:2018-05-24 11:26:41

标签: python com dispatch teststand

我有一个连接到TestStand的python脚本,并从.seq(序列)文件中检索某些数据。

import win32com.client
import pythoncom
TestStandEngine = win32com.client.Dispatch("TestStand.Engine")
Seqfile = TestStandEngine .GetSequenceFileEx("Seq_File.seq")
Main = Seqfile.GetSequenceByName("MainSequence") #Get's the main sequence of the file

我已安装了Test Stand 2014的x32和x64版本,脚本运行得很好。 卸载x64版本后(因为不需要),脚本现在会出现此错误:

Traceback (most recent call last):
  File "C:\ts\Main.py", line 9, in <module>
    TestStandEngine = win32com.client.Dispatch("TestStand.Engine")
  File "C:\LegacyApp\Python_2.7\lib\site-packages\win32com\client\__init__.py", line 95, in Dispatch
    dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
  File "C:\LegacyApp\Python_2.7\lib\site-packages\win32com\client\dynamic.py", line 114, in _GetGoodDispatchAndUserName
    return (_GetGoodDispatch(IDispatch, clsctx), userName)
  File "C:\LegacyApp\Python_2.7\lib\site-packages\win32com\client\dynamic.py", line 91, in _GetGoodDispatch
    IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
com_error: (-2147221005, 'Invalid class string', None, None)

经过一些研究后,我想我知道是什么导致了这个问题,但我找不到任何方法来解决它。

- 我的计算机上的Python安装程序是32位

>>> import platform
>>> platform.architecture()
('32bit', 'WindowsPE')

- 我计算机上唯一安装的测试台是32位版本。

- 操作系统:Windows x64位操作系统

这是我的猜测:我认为当它调度Teststand.Engine时,它会尝试使用不再安装的x64版本; 我已尝试添加clsctx参数,但结果相同:

win32com.client.Dispatch("TestStand.Engine",clsctx=pythoncom.CLSCTX_LOCAL_SERVER)

有没有办法强迫&#39;它推出32位版本?如果TestStand是在32位上并且Python在32位上它不应该返回一个32位COM对象,它应该与python 32bit一起工作吗?

更新:在PowerShell中运行this后,它返回了COM的所有有效名称列表,但 Teststand.Engine &#39 ;不在列表中。列表中唯一的TestStand相关对象是TestStand.ExLauncher(我可以调度它,但它没有与TestStand.Engine相同的属性/用途

2 个答案:

答案 0 :(得分:0)

通过重新安装TestStand解决了这个问题。 (我知道重新安装会解决问题,但我希望我不必重新安装它,因为它会影响多个配置)

问题在于,当我卸载TestStand x64版本时,卸载程序认为我将完全卸载TestStand,并且很可能删除了一些包含“TestStand.Engine”方向的注册表项。 重新安装x32位版本后,它可以正常工作。

答案 1 :(得分:0)

您是否尝试过使用版本相关的界面,即

TestStandEngine = win32com.client.Dispatch("TestStand.Engine.1")