我需要在 Windows 7 到 10 的登录屏幕上运行 GUI 应用程序。
我有一个使用 node-windows 模块注册为 SYSTEM (默认)运行的服务的 nodejs 应用程序。这似乎是我需要的先决条件,但还需要更多的东西。
该应用程序只是一个连接到套接字服务器的基本套接字客户端,目前还没有什么特别之处。
我在想,如果我使用 child_process.spawn() 打开提升的命令提示符和/或作为另一个用户运行 - 但什么用户?系统不这样做。我在想无论 winlogon.exe 以何种方式运行,但这似乎不是 SYSTEM,即使它在任务管理器中显示的是它。
如果您具有系统级访问权限,是否有 Windows 命令可以在登录屏幕中运行 GUI?
更新:
好的。到目前为止,我有一个类似 telnet 的反向客户端作为 SYSTEM 用户下的 Windows 服务在“远程主机”上运行。它定期连接到测试服务器文本界面(也是节点),您可以从中输入 nodejs 命令——基本上是自制的 JS REPL。
我能够在会话 0 下生成一个隐藏的交互式 Windows 命令提示符,键入命令并通过我的小反向命令行终端获取输出。
Obvi,加密和安全性在这里很重要,但是现在 Windows 在我笔记本电脑上 Linux 内的 VM 中运行,并且应用程序仅通过仅主机虚拟网络上的私有 NIC 相互通信,因此数据包是不会溢出到真实的网络上。
在会话 0 中的 Windows 命令提示符下,我尝试运行我的远程控制 GUI 应用程序。我没有看到 GUI,而是收到以下错误:
[5472:5492:0828/031356.901:ERROR:gpu_process_transport_factory.cc(1024)] 丢失 UI 共享上下文。
如果我tasklist,我会得到:
winlogon.exe 2140 控制台 3 6,704 K 未知 NT AUTHORITY\SYSTEM 0:00:00 N/A
LogonUI.exe 4772 控制台 3 19,104 K 未知 NT AUTHORITY\SYSTEM 0:00:00 N/A
所以,我可以看到 winlogon.exe 和 LogonUI.exe 在会话 3 中作为用户“SYSTEM”运行。
如何将服务放在 winlogon 和 logonui 的 GUI 上下文中,或在其中生成我的应用程序?
是否有 Windows 命令可以执行此操作?一个nodejs命令/模块/函数?
更多信息:
它需要是一个程序化的、可自动化的解决方案,我可以在程序中工作——无需使用另一个 GUI 应用程序进行手动调整来使其工作。
但是,注册表编辑或任何可通过节点或 Windows 控制台命令完成的操作都应该是可以接受的,因为我可以将它们合并到我的代码中。
背景:这主要是为了运行我编写的远程桌面应用程序,很像 Screen-Connect 或 LogMeIn。它工作得很好——除了在你调用任何调用 UAC 或进入登录屏幕时它会暂停的部分,这使得它对于远程 IT 工作尚不实用。
nodejs Windows 服务应用程序也可以很好地工作,在启动时作为服务自动启动,自动连接/重新连接到测试服务器,无需登录或持续连接,并且持续保持活动状态。
基本上我在想,如果我可以在登录屏幕中运行它的一个实例,它应该能够抓取桌面视频捕获以输出到网络,并从网络调用远程鼠标和键盘输入。
桌面捕获是使用 NW.js 和在远程主机上运行的 child_process.spawn()ed 基于机器人的套接字客户端完成的。
不幸的是,在服务应用程序中植入robotjs不起作用——我试过了,因为我至少在想我可以在控制器应用程序中有一个自定义的远程登录屏幕,并让robotjs在远程电脑的登录屏幕中输入密码——但没有运气。看来我只获得了旧版 Desktop 0,而不是基于robotjs 的键盘/鼠标输入的登录屏幕。
我真的希望我所需要的只是“运行”其他一些用户或进程。**注意:我正在寻找一种不涉及自动登录、重新启动或解决方法的方法。我知道微软已经正式支持完成这些任务的方法——但我还没有找到一种通过 Node 而不是 C 来完成的方法。如果有一个使用本机代码的节点模块来完成它,那对我来说很好。我只希望我的代码是 JavaScript。
无论如何,这就是我问这个问题的实际目标——在登录屏幕上运行我的远程桌面应用程序以获取视频并调用鼠标操作和击键。
如果有更好的方法与标题中的问题不匹配,请回答,如果可行,我将编辑问题以匹配答案。