一个 Python 脚本 一个 GUI 应用程序
Python Script 有两个功能,目前在启动 Windows 10 操作系统时通过 Common Startup 文件夹启动。Python Script 作为服务器软件运行,在 Arduino 开发板和客户端桌面之间来回传递状态和简单命令。第二个任务是监控 GUI 应用程序。识别 GUI 是否崩溃,记录崩溃,然后重新启动应用程序。
GUI 应用程序也有两种模式。第一种模式是手动模式。选择远程进入电路板的用户可以操作外部连接的设备/传感器。让用户完全控制。第二种模式是自动化模式。此模式默认启用,并将执行例程来控制外部连接的设备/传感器。GUI 有一个禁用按钮,用于禁用自动化模式并进入手动模式。GUI 是用 Visual Studio 用 C++ 编写的,GUI 使用 MFC。
这就是背景。
我正在寻找有关如何在无头系统上启动 python 脚本和 GUI 应用程序的信息,以便当/如果用户远程进入桌面时,他们可以与 GUI 交互。
我做了什么。
我尝试做的第一件事是将 Python 脚本加载到启动文件夹中。但是,此文件夹仅在用户登录时运行。因此,我做了进一步的挖掘,找到了任务计划程序。运行任务计划程序似乎有效。它成功启动了 Python 脚本,Python 脚本启动了 GUI 应用程序,但它是作为后台进程启动的。所以我无法与 GUI 交互。我尝试的最新方法是将 Python 脚本移动到 Common Startup 文件夹中。此文件夹与 Startup 文件夹的不同之处在于,它在启动时启动其中包含的任何应用程序,而不是在用户登录时启动。虽然 Python 脚本启动得很好,但 GUI 仅在用户登录后启动,因此您需要远程登录才能启动 GUI。
该系统将连续运行数小时,无需任何人登录或关注。因此,python 脚本需要能够启动 GUI 应用程序,以便当/如果有人登录时,他们可以通过手动模式进行调整。
Python 脚本通过单独的线程启动 GUI 应用程序
overWatch = threading.Thread(target=cmd.overWatch, daemon=True)
def overWatch():
global relaunch
while True:
if relaunch == True:
if not checkIfProcessRunning(AIRIS):
print("Attempt to launch")
subprocess.call(['C:\\**\\***\\****\\*****.exe'])
有人有任何见解吗?
答案1
所以我的问题不一定是系统在未连接显示器的情况下不想启动 GUI,而是 Windows 不想在用户登录之前启动任何 UI。
所以这是一个简单的解决方案。我将系统设置为自动登录。
打开运行命令框并输入。将弹出一个用户帐户窗口。选择您想要自动登录的用户。接下来取消选中“用户必须输入用户名和密码才能使用此计算机”框。单击应用,系统将提示您输入用户密码进行确认。
应用程序的 GUI 现在启动并执行其需要的操作。当我准备好时,我可以远程访问 SBC 并根据需要与其交互。关闭连接,一切就绪。
显然,这会带来潜在的安全问题。就我的情况而言,不用担心,因为这是我们正在测试的内部产品。