Сценарий Pywinauto, скомпилированный как exe с использованием Pyinstaller, выполняется локально, но не удаленно из строки cmd с использованием PSEXEC. - PullRequest
0 голосов
/ 11 мая 2019

У меня есть требование, согласно которому навигация и управление унаследованным приложением должны быть автоматизированы - этот автоматизированный метод, упакованный в виде сценария, необходимо будет развернуть через SCCM для нашей пользовательской базы.

Через некоторое времяВ исследованиях я решил использовать PythonAuto модуль Python для достижения своей цели.

Мне удалось создать скрипт, который автоматизирует все шаги графического интерфейса в соответствии с требованиями, и я также упаковал этот скрипт как exe, используямодуль Pyinstaller, но проблема, с которой я сейчас сталкиваюсь, заключается в следующем: при локальном запуске на компьютерах с Windows 7 и Windows 10 исполняемый файл выполняется успешно.Однако, при удаленном запуске exe-файла через SCCM или PSEXEC, exe-файл не выполняется.

Я также включил exe-файл в сценарий powershell, но то же самое происходит при выполнении сценария через PSEXEC или SCCM..

Я использую PSEXEC как системный пользователь, у которого есть полные права администратора.Пользователь SCCM также имеет полные права администратора.

Это пример сценария Pyinstaller, который я упаковал в исполняемый файл, просто для целей тестирования:

from __future__ import print_function
import logging
from pywinauto import actionlogger
from pywinauto import Application

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--log", help = "enable logging", type=str, required = False)
args = parser.parse_args()

actionlogger.enable()
logger = logging.getLogger('pywinauto')
if args.log:
    logger.handlers[0] = logging.FileHandler(args.log)

app = Application(backend='uia').start(r'mspaint.exe')
dlg = app.window(title_re='.* - Paint')


dlg.close()

При локальном запуске exe из командной строки появляется следующее сообщение об успешном выполнении:

c: \ Temp> pywinauto_test 2019-05-11 07: 47: 14,215 ИНФОРМАЦИЯ: ЗапущеноПриложение mspaint.exe.2019-05-11 07: 47: 14,344 ИНФОРМАЦИЯ: Закрытое окно «Без названия - Paint»

При удаленном запуске через psexec появляется следующее:

C: \ Temp> pywinauto_test.exe 2019-05-11 07: 29: 38,221 ИНФОРМАЦИЯ: Запущено приложение mspaint.exe.[5516] Не удалось выполнить сценарий C: \ Temp> e. Отслеживание Pywinautopaint (последний вызов был последним): файл «site-packages \ pywinauto \ application.py», строка 256, в файле __resolve_control. Site-packages \ pywinauto \ timings.py", строка 458, в wait_until_passes pywinauto.timings.TimeoutError

Во время обработки вышеуказанного исключения произошло другое исключение:

Traceback (последний вызов был последним): файл" Pywinautopaint.py ",строка 59, в файле "site-packages \ pywinauto \ application.py", строка 378, в getattribute Файл "site-packages \ pywinauto \ application.py", строка 259, в __resolve_control File "site-packages \ pywinauto \ timings.py ", строка 436, в файле wait_until_passes, файл" site-packages \ pywinauto \ application.py ", строка 201, в файле __get_ctrl
, файл" site-packages \ pywinauto \ findwindows.py ", строка 87, в find_element pywinauto.findwindows.ElementNotFoundError: {'title_re': '. * - Paint', 'backend': 'uia', 'process': 2844}

1 Ответ

0 голосов
/ 12 мая 2019

Все известные способы удаленного запуска автоматизации графического интерфейса перечислены в Руководство по удаленному выполнению .Это не относится к PyInstaller или другим подобным py2exe инструментам.В основном это ограничения ОС Windows и функции RDP, которые можно обойти несколькими способами.

Кроме того, ElementNotFoundError часто возникает, когда время ожидания по умолчанию для поиска окна (5 секунд) недостаточно.Например, если удаленная виртуальная машина работает медленно.Это может быть не связано с общими проблемами удаленного выполнения.

...