使用Pyinstaller编译为exe的Pywinauto脚本在本地执行,但不能使用PSEXEC从cmd行远程执行

时间:2019-05-11 05:59:35

标签: python pyinstaller psexec pywinauto

我有一个要求,对遗留应用程序的导航和控制必须是自动化的-这种打包为脚本的自动化方法需要通过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}

1 个答案:

答案 0 :(得分:0)

Remote Execution Guide中列出了所有用于远程运行GUI自动化的已知方法。它不是特定于PyInstaller或其他类似py2exe的工具。通常,可以通过几种方法解决OS Windows限制和RDP功能。

当找不到窗口的默认超时时间(5秒)不足时,通常也会引发ElementNotFoundError。例如,如果远程虚拟机运行缓慢。这可能与常见的远程执行问题无关。