2016-10-07 5 views
5

Я бегу следующий через удаленный скрипт PHP, который подключается к SSH:CMD начать ни Psexec открыть интерактивное приложение на переднем плане при использовании PHP для подключения к SSH

cmd /C start "" /MAX /b "C:\Windows\System32\notepad.exe" 

процесс запустился, однако он остается в фон и не будет полностью открываться на удаленном рабочем столе. Есть ли способ заставить его работать в интерактивном режиме (например, как PSExec имеет флаг -i)?

Edit:

Так 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 не могут автоматически отображать интерактивное приложение на переднем плане .

+0

Только окно переднего плана или недавно запущенная программа (2 секунды) могут помещать окно на передний план. Чтобы получить текст элемента управления в другом процессе, отправьте сообщение WM_GETTEXT непосредственно вместо вызова GetWindowText. См. Https://msdn.microsoft.com/en-us/library/windows/desktop/ms633539(v=vs.85).aspx для получения полного списка правил. PSExec копирует себя в целевую систему, используя общий ресурс admin. Затем подключается к сервисному контроллеру цели и устанавливается как служба. Затем запускается программа. Windows потратила десятилетия на то, чтобы писать код, предотвращающий кражу фокусов. –

+0

Нет функции окон, позволяющей программам работать удаленно, чтобы помешать интерактивному пользователю в удаленной системе. –

+0

Для справки окончательный фрагмент кода, который я опубликовал, действительно работает, чтобы запустить процесс блокнота на переднем плане, но ТОЛЬКО, если я отправлю его вручную через PuTTY. Вы знаете, какой правильный синтаксис для скрипта PHP должен выполнить это? – Talisman

ответ

1

Откройте окно командной строки и запустите сначала cmd /? и второй start /? и прочитайте оба раза выходную справку.

cmd /C запускает новый процесс команд Windows, который автоматически закрывается из-за /C, когда дополнительно применяется команда для выполнения в процессе команды.

Команда start "" /MAX /B запускает еще один процесс командной строки с пустой строкой в ​​качестве заголовка окна и, начиная с этим процессом команды приложения GUI Блокнота Windows, который должен быть запущен с развернутым окном из-за /MAX, но которые должны работать в фоновом режиме (= без видимого окна) из-за /b.

Значит, ошибка /b as really wanted is Notepad на переднем плане с максимальным окном вместо фона без окна.

И 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 Environment Variables для списка предопределенных переменных среды с описанием.

+0

Спасибо за подробный ответ Mofi! Процесс выполняется с первым приведенным вами примером, однако он все еще, по-видимому, находится в фоновом режиме. – Talisman

+0

Я добавил дополнительную информацию для редактирования. – Talisman

+0

Хорошо. С задачей, которая лучше объясняется в вопросе, я сейчас понимаю, что вы пытаетесь достичь. К сожалению, я не могу помочь в решении этой проблемы из-за отсутствия опыта использования PHP для интерактивного запуска приложений на удаленной машине. Я сохраняю свой ответ, поскольку он по крайней мере объясняет одну причину, по которой начатое приложение не было открыто максимально на переднем плане на удаленной машине. – Mofi