win32com Отправка 32-разрядной версии TestStand - PullRequest
0 голосов
/ 24 мая 2018

У меня есть скрипт на python, который подключается к TestStand и получает определенные данные из файла .seq (sequence).

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)

Есть ли способ заставить его запустить 32-битную версию?Если TestStand работает на 32-битной версии, а Python на 32-битной, не должен ли он вернуть 32-битный COM-объект, который должен работать с Python 32-битной?

Обновление: Так что после запуска this в PowerShell он возвращает список всех допустимых имен COM, но « Teststand.Engine » отсутствует в списке.Единственный связанный с TestStand объект в списке - это TestStand.ExLauncher (который я могу отправить, но он не имеет тех же атрибутов / использования, что и TestStand.Engine

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Вы пытались использовать вместо этого зависящий от версии интерфейс, то есть

TestStandEngine = win32com.client.Dispatch("TestStand.Engine.1")
0 голосов
/ 29 мая 2018

Решил, переустановив TestStand.(Я знал, что переустановка решит проблему, но я надеялся, что мне не пришлось переустанавливать ее, так как это повлияло бы на несколько конфигураций)

Проблема заключалась в том, что при удалении версии TestStand x64 деинсталляторЯ подумал, что собираюсь полностью удалить TestStand и, скорее всего, удалил некоторые ключи реестра, содержащие указания для «TestStand.Engine». После переустановки 32-разрядной версии все работает нормально.

...