当使用PHP连接到SSH时,CMD启动或PSExec在前台打开交互式应用程序

Tal*_*man 5 php windows cmd openssh psexec

我通过连接到SSH的远程PHP脚本运行以下代码:

cmd /C start "" /MAX /b "C:\Windows\System32\notepad.exe"
Run Code Online (Sandbox Code Playgroud)

该过程确实启动,但它仍然在后台,并且无法在远程桌面上完全打开.有没有办法让它以交互方式工作(比如PSExec如何使用-i标志)?

编辑:

所以PHP连接到SSH ssh2_connect然后ssh2_exec以下列方式使用:

        if (!($stream = ssh2_exec($con, $shcom ))) {
Run Code Online (Sandbox Code Playgroud)

$shcom传递给SSH的命令在哪里,例如:

    $shcom = 'cmd.exe /C start "" /MAX "%SystemRoot%\System32\calc.exe"';
Run Code Online (Sandbox Code Playgroud)

我之前使用PSExec和PuTTY(请注意不是通过PHP脚本)通过以下方法在远程计算机上手动打开notepad.exe:

cd "C:\Program Files\PSExec\" & psexec \\localhost -i 2 -ds "C:\Windows\System32\notepad.exe"
Run Code Online (Sandbox Code Playgroud)

哪个成功地工作但是这也没有通过PHP正常运行.目前,CMD和PSExec都不能自动在前台启动交互式应用程序.

Mof*_*ofi 1

打开命令提示符窗口并运行第一次cmd /?和第二次start /?并读取两次输出帮助。

cmd /C启动一个新的 Windows 命令进程,该进程会自动关闭,因为/C在命令进程终止时另外应用了要执行的命令。

该命令start "" /MAX /B使用空字符串作为窗口标题启动另一个命令进程,并在此命令进程中启动 GUI 应用程序Windows 记事本,该应用程序应以最大化窗口启动,但/MAX应在后台运行(= 没有可见窗口),因为/b

因此,错误在于/b真正想要的使用方式是在具有最大化窗口的前台启动记事本,而不是在没有窗口的后台启动记事本。

并且 Windows 一定不能不可避免地安装在驱动器 C: 上名为 的目录中Windows。因此,最好使用这两个命令之一:

cmd.exe /C start "" /MAX "%SystemRoot%\System32\notepad.exe"
cmd.exe /C start "" /MAX "%windir%\System32\notepad.exe"
Run Code Online (Sandbox Code Playgroud)

环境变量windir是从Windows 95开始默认存在的环境变量,包含运行Windows的目录路径。

环境变量SystemRoot是基于 Windows NT 的所有 Windows 版本预定义的环境变量,具有 Windows 目录的路径。

现在最好使用,SystemRoot因为这个环境变量是Windows内置的,而windir只是在系统环境变量列表中预定义的,因此也可以删除。

请参阅有关Windows 环境变量的维基百科文章,获取预定义环境变量的列表及其说明。