Я запускаю следующее через удаленный скрипт PHP, который подключается к SSH:
cmd /C start "" /MAX /b "C:\Windows\System32\notepad.exe"
Процесс запускается, однако он остается в фоновом режиме и не открывается полностью на удаленном рабочем столе. Есть ли способ заставить его работать в интерактивном режиме (например, как у PSExec есть флаг -i)?
Редактировать:
Таким образом, PHP подключается к SSH с ssh2_connect
затем использует ssh2_exec
следующим образом:
if (!($stream = ssh2_exec($con, $shcom ))) {
где $shcom
команда передается в SSH, например:
$shcom = 'cmd.exe /C start "" /MAX "%SystemRoot%\System32\calc.exe"';
Ранее я использовал PSExec и PuTTY (обратите внимание, не с помощью сценария PHP), чтобы вручную открыть notepad.exe на удаленном компьютере с помощью следующего:
cd "C:\Program Files\PSExec\" & psexec \\localhost -i 2 -ds "C:\Windows\System32\notepad.exe"
который успешно работал, однако это также не работает должным образом через PHP. В настоящее время ни CMD, ни PSExec не могут вывести интерактивное приложение на первый план. автоматически.
Откройте окно командной строки и запустите сначала cmd /?
и второй start /?
и прочитайте оба раза вывод справки.
cmd /C
запускает новый командный процесс Windows, который автоматически закрывается из-за /C
когда дополнительно примененная команда для выполнения в командном процессе прекращается.
Команда start "" /MAX /B
запускает еще один командный процесс с пустой строкой в качестве заголовка окна и запускает в этом командном процессе приложение с графическим интерфейсом Блокнот 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"
Переменная среды windir
переменная среды, существующая по умолчанию начиная с Windows 95, с указанием пути к каталогу под управлением Windows.
Переменная среды SystemRoot
переменная среды, предопределенная всеми версиями Windows на основе Windows NT с путем к каталогу Windows.
В наше время лучше использовать SystemRoot
поскольку эта переменная окружения является встроенной в Windows, в то время как windir
просто предопределено в списке системных переменных среды и поэтому может быть удалено.
Смотрите статью в Википедии о Переменные среды Windows для списка предопределенных переменных среды с описанием.
Других решений пока нет …