jdm*_*eld 4 windows authentication node.js nwjs robotjs
我需要在 Windows 7 到 10 的登录屏幕上运行 GUI 应用程序。
我有一个 nodejs 应用程序注册为一项服务,它使用 node-windows 模块作为系统(默认)运行。这似乎是我需要的先决条件,但还需要更多的东西。
该应用程序只是一个连接到套接字服务器的基本套接字客户端,目前还没有什么特别之处。
我在想,如果我使用 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 Console 3 6,704 K 未知 NT AUTHORITY\SYSTEM 0:00:00 N/A
LogonUI.exe 4772 Console 3 19,104 K 未知 NT AUTHORITY\SYSTEM 0:00:00 N/A
因此,我可以看到 winlogon.exe 和 LogonUI.exe 作为用户“SYSTEM”在会话 3 中运行。
如何将服务放在 winlogon 和 logonui 的 GUI 上下文中,或者在其中生成我的应用程序?
是否有 Windows 命令可以执行此操作?nodejs 命令/模块/功能?
更多信息:
它需要是一个程序化的、可自动化的解决方案,我可以在程序中使用——无需使用另一个 GUI 应用程序手动调整即可使其正常工作。
注册表编辑或任何可通过节点或 Windows 控制台命令完成的操作都应该是可以接受的,因为我可以将它们合并到我的代码中。
背景:这主要是为了运行我编写的远程桌面应用程序,很像 Screen-Connect 或 LogMeIn。它工作得很好——除了在你调用任何调用 UAC 或进入登录屏幕时它会暂停的部分,这使它不适用于远程 IT 工作。
nodejs Windows 服务应用程序也适用于它的一部分,在启动时作为服务自动启动,自动连接/重新连接到测试服务器而无需登录或持续连接,并持续保持活动状态。
基本上我在想,如果我可以在登录屏幕中运行它的一个实例,它应该能够抓取桌面视频捕获以输出到网络,并从网络调用远程鼠标和键盘输入。
桌面捕获是使用 NW.js 和 child_process.spawn()ed 在远程主机上运行的基于robotjs 的套接字客户端完成的。
不幸的是,在服务应用程序中植入robotjs 不起作用——我尝试过,因为我在想至少我可以在控制器应用程序中有一个自定义的远程登录屏幕,并让robotjs 在远程电脑的登录屏幕中输入密码——但没有运气。看来我只得到了旧的 Desktop 0,而不是基于 robotsjs 的键盘/鼠标输入的登录屏幕。
我真的希望我所需要的只是“运行”其他用户或进程。**注意:我正在寻找一种不涉及自动登录、重新启动或解决方法的方法来执行此操作。我知道 MicroSoft 已经正式支持完成这些任务的方法——但我还没有找到一种通过 Node 而不是 C 来完成它的方法。如果有一个使用本机代码来完成的节点模块,那对我来说很好。我只希望我的代码是 JavaScript。
无论如何,这就是我问这个问题的实际目标——在登录屏幕上运行我的远程桌面应用程序来捕捉视频并调用鼠标操作和击键。
如果有更好的方法与标题中的问题不匹配,请回答,如果有效,我将编辑问题以匹配答案。
答案是“paexec”。psexec 的工作原理完全相同,但 paexec 是开源的、可自由分发的,并且可在您的个人和商业应用程序的应用程序中使用。
要求:
下载 paexec.exe 。
把它放在你可以执行的地方,或者 cd 到你放入的文件夹,或者把它放在命令路径中,或者将你放入的文件夹添加到命令路径中,或者通过路径名引用它(即 c:\folder \subfolder\paexec -your_options)。
受到推崇的:
从 Windows 服务(在我的例子中是 npm node-windows 服务)执行它。这允许您以 SYSTEM 身份运行它。还有其他方法,但这种方法似乎效果最好。
使用示例:
paexec -d -s -x -w c:\path\to\your\app_folder cmd /c app.exe -your_options
Run Code Online (Sandbox Code Playgroud)
这是如何工作的:
-d 防止 paexec 等待应用程序退出,因此允许非阻塞。
-s 以 SYSTEM 用户身份执行。
-x 使其在登录屏幕上运行
-w 设置当前工作目录
cmd /c yourappname.exe 允许您使用前面的选项运行 GUI 交互式应用程序(如果不先打开提示,它似乎不起作用)。
添加注意事项:
使用 'cmd /c',您可以调用 .bat 或 .cmd 脚本并使用 'start /b your_app.exe' 使 cmd.exe 窗口消失(否则您会在登录屏幕上卡住它,直到您关闭它或您的应用程序)。
您的应用程序将在登录后继续运行,但它不会在用户登录会话中运行,因此如果您希望您的应用程序同时运行,我建议使用“taskkill /f /im your_app.exe”或其他方式停止然后在用户登录会话中运行。
您可以通过以下方式在用户的桌面会话上运行它:
paexec -d -s -i 1 -w... (the rest is the same as above).
Run Code Online (Sandbox Code Playgroud)
...假设只有一个用户登录,他们将在会话 1 上。这就是 '-i 1' 选项所做的,在会话 1 上运行它。如果有多个用户登录(即通过切换用户等)他们可能有不同的会话编号,因此只需将“-i 1”替换为“-ix”,其中“x”是用户会话 ID。
您可以通过 Windows 命令“tasklist /v”查找会话 ID。
如果您尝试从 node.js 服务运行它,您将需要使用 process_child 内置模块并生成一个 cmd 提示符来运行它。有很多这样的例子,所以在这里不解决。从 Windows 服务运行它的好处是它不会打开一个可见的窗口,你可以通过标准的 child_process.spawn() 方法和事件提供 i/o。
安全:
从 Windows 服务(即通过 node-windows 和 child_process.spawn)运行它允许你不仅在登录屏幕上运行你的 GUI 应用程序,而且在登录前的引导时,无论是否使用 GUI——没有任何典型的不安全hacks,比如自动登录到一个特殊的用户帐户然后锁定屏幕或注销等。它实际上是使用一种反映 MicroSoft/SysInternals 自己的工具的工具,根据 MS 的官方规定的方法来执行此操作。
这里的弱点只是你的应用程序,所以按下按钮并确保安全!
注意:Obvi 这是一个复杂的问题,这可能就是为什么似乎没有任何好的答案的原因 - 并且可能只有少数人想出了它不想分享。所以你来了。
享受!
PS:你可能真的很邪恶。 请不要将其用于恶意目的。 这正是他们让它变得如此困难的原因。做好事,这样我们都可以从它的力量中受益。
除了关于任务名称:
如果您希望引用您的节点或 nw.js 应用程序,并在任务列表和任务管理器中将其视为 yourappname.exe,您只需将 node.exe 和 nw.exe 可执行文件重命名为您希望它们显示的任何内容(即将 nw.exe 重命名为 myapp.exe,它将在 Windows 中显示并称为 myapp.exe)。这是假设您的应用程序文件夹中有 node.exe 等的本地副本...不要对全局安装的可执行文件执行此操作!
还有一件事:
如果有人有更好的、久经考验的方法,请将其添加为答案!
如果它对我有用,我很乐意不接受我的回答并接受你的回答!!
归档时间: |
|
查看次数: |
2837 次 |
最近记录: |