在无头系统上启动 GUI 应用程序

在无头系统上启动 GUI 应用程序

一个 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 并根据需要与其交互。关闭连接,一切就绪。

显然,这会带来潜在的安全问题。就我的情况而言,不用担心,因为这是我们正在测试的内部产品。

相关内容