2016-10-07 4 views
5

Je suis en cours d'exécution suivantes via un script PHP distant qui se connecte à SSH:CMD commencer ni PSExec ouvrir l'application interactive au premier plan lorsque vous utilisez PHP pour se connecter à SSH

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

Le processus ne démarre mais il reste en l'arrière-plan et ne s'ouvrira pas complètement sur le bureau distant. Y a-t-il un moyen de le faire fonctionner de manière interactive (comme PSExec a le drapeau -i)?

Edit:

Ainsi, le PHP se connecte à SSH avec ssh2_connect utilise ensuite ssh2_exec de la manière suivante:

 if (!($stream = ssh2_exec($con, $shcom))) { 

$shcom est la commande passée au SSH, tel que:

$shcom = 'cmd.exe /C start "" /MAX "%SystemRoot%\System32\calc.exe"'; 

J'ai précédemment utilisé PSExec et PuTTY (notez pas via le script PHP) pour ouvrir manuellement notepad.exe sur une télécommande machine via les éléments suivants:

cd "C:\Program Files\PSExec\" & psexec \\localhost -i 2 -ds "C:\Windows\System32\notepad.exe" 

qui n'a pas fonctionné avec succès mais cela ne fonctionne pas aussi bien via PHP. Actuellement, ni CMD ni PSExec ne peuvent afficher une application interactive au premier plan automatiquement.

+0

Seule la fenêtre de premier plan ou un programme nouvellement lancé (2 secondes) peut placer une fenêtre au premier plan. Pour récupérer le texte d'un contrôle dans un autre processus, envoyez un message WM_GETTEXT directement au lieu d'appeler GetWindowText. Voir https://msdn.microsoft.com/en-us/library/windows/desktop/ms633539(v=vs.85).aspx pour une liste complète des règles. PSExec se copie sur le système cible à l'aide du partage admin. Se connecte ensuite au contrôleur de service de la cible et s'installe en tant que service. Puis commence le programme. Windows a passé des décennies à écrire du code empêchant les fenêtres de se concentrer. –

+0

Il n'y a pas de fonctionnalité Windows permettant aux programmes exécutés à distance d'interférer avec un utilisateur interactif sur le système distant. –

+0

Pour référence, l'extrait de code final que j'ai posté fonctionne pour démarrer un processus bloc-notes au premier plan, mais seulement si je l'envoie manuellement via PuTTY. Savez-vous quelle serait la bonne syntaxe pour que le script PHP l'exécute? – Talisman

Répondre

1

Ouvrez une fenêtre d'invite de commande et exécutez d'abord cmd /? puis la deuxième start /? et lisez les deux fois l'aide à la sortie.

cmd /C démarre un nouveau processus de commande Windows qui se ferme automatiquement à cause de /C lorsque la commande supplémentaire à exécuter dans le processus de commande est terminée.

La commande start "" /MAX /B démarre un processus plus de commande avec une chaîne vide comme titre de la fenêtre et à partir de ce processus de commande de l'application GUI Bloc-notes Windows qui doit être lancé dans une fenêtre maximisée en raison de /MAX mais qui devrait fonctionner en arrière-plan (= sans fenêtre visible) à cause de /b.

Donc l'erreur utilise /b comme on le souhaite vraiment commence Bloc-notes au premier plan avec fenêtre agrandie au lieu de dans l'arrière-plan sans fenêtre.

Et Windows ne doit pas être installé inévitablement sur le lecteur C: dans un répertoire nommé Windows. Par conséquent, il est préférable d'utiliser l'une de ces deux commandes:

cmd.exe /C start "" /MAX "%SystemRoot%\System32\notepad.exe" 
cmd.exe /C start "" /MAX "%windir%\System32\notepad.exe" 

La variable d'environnement windir est variable d'environnement par défaut existant depuis Windows 95 avec le chemin vers le répertoire d'exécuter Windows. La variable d'environnement SystemRoot est une variable d'environnement prédéfinie par toutes les versions de Windows basées sur Windows NT avec le chemin d'accès au répertoire Windows.

De nos jours, il est préférable d'utiliser SystemRoot car cette variable d'environnement est intégrée à Windows alors que windir est simplement prédéfinie dans la liste des variables d'environnement système et peut donc être également supprimée.

Voir l'article de Wikipedia sur Windows Environment Variables pour une liste de variables d'environnement prédéfinies avec description.

+0

Merci pour la réponse détaillée Mofi! Le processus s'exécute avec le premier exemple que vous avez fourni mais il est toujours apparemment en arrière-plan. – Talisman

+0

J'ai ajouté des informations supplémentaires dans une édition pour vous. – Talisman

+0

Okay. Avec la tâche mieux expliquée en question je comprends mieux maintenant ce que vous essayez d'accomplir. Malheureusement, je ne peux pas m'empêcher d'approfondir ce sujet car je n'ai aucune expérience de l'utilisation de PHP pour exécuter des applications de manière interactive sur une machine distante. Je garde ma réponse car elle explique au moins une raison pour laquelle l'application démarrée n'a pas été ouverte maximisée en premier plan sur la machine distante. – Mofi