我有一个要求,对遗留应用程序的导航和控制必须是自动化的-这种打包为脚本的自动化方法需要通过SCCM部署到我们的用户群中。
经过研究,我决定使用Python的PywinAuto模块实现我的目标。
我设法创建了一个脚本,该脚本可以根据需要自动执行所有GUI步骤,并且还使用Pyinstaller模块将此脚本打包为exe,但是我现在遇到的问题如下:在本地运行时在Windows 7和Windows 10计算机上,该exe执行成功。但是,通过SCCM或PSEXEC远程触发exe时,exe无法执行。
我也将exe包装在powershell脚本中,但是通过PSEXEC或SCCM执行脚本时也会发生同样的事情。
我以系统用户身份运行PSEXEC,该用户具有完全的管理员权限。 SCCM用户也具有完全的管理员权限。
这是我打包到exe中的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信息:关闭窗口 “无标题-绘画”
通过psexec远程运行时,将显示以下内容:
C:\ Temp> pywinauto_test.exe 2019-05-11 07:29:38,221信息:已启动 mspaint.exe应用程序。 [5516]无法执行C:\ Temp> e脚本 Pywinautopaint Traceback(最近一次通话):文件 第256行中的“ site-packages \ pywinauto \ application.py” __resolve_control在wait_until_passes pywinauto.timings.TimeoutError中的文件“ site-packages \ pywinauto \ timings.py”,第458行
在处理上述异常期间,发生了另一个异常:
跟踪(最近一次通话最近):文件“ Pywinautopaint.py”,行 59,在文件“ site-packages \ pywinauto \ application.py”中, 378,位于 getattribute 文件中 第259行中的“ site-packages \ pywinauto \ application.py” __resolve_control文件“ site-packages \ pywinauto \ timings.py”,第436行,在wait_until_passes文件中 __get_ctrl中的“ site-packages \ pywinauto \ application.py”行201,
在第87行的文件“ site-packages \ pywinauto \ findwindows.py”中 find_element pywinauto.findwindows.ElementNotFoundError:{'title_re': '。*-绘画','后端':'uia','过程':2844}
答案 0 :(得分:0)
Remote Execution Guide中列出了所有用于远程运行GUI自动化的已知方法。它不是特定于PyInstaller或其他类似py2exe的工具。通常,可以通过几种方法解决OS Windows限制和RDP功能。
当找不到窗口的默认超时时间(5秒)不足时,通常也会引发ElementNotFoundError
。例如,如果远程虚拟机运行缓慢。这可能与常见的远程执行问题无关。