2009-09-10 5 views
10

Estoy trabajando en un entorno controlado, xp, de intranet y necesito iniciar procesos externos desde una aplicación PHP. (Copias de seguridad, informes, etc.)php Cómo inicio un programa externo en ejecución - Tengo problemas con el sistema y el ejecutivo

Puedo obtener un sistema o ejecutivo para iniciar procesos que funcionan en silencio. Aquí hay un ejemplo simple

<?php exec ("echo hello > hello.txt");?> 

puedo conseguir que se ejecute un archivo del palo que no tiene salida visible.

no puedo conseguir cualquier programa que tenga una pantalla para funcionar como un generador de informes o el bloc de notas ...

<?php exec ("explorer");?> 

no hace nada. o lo mismo para el sistema

Respuesta

4

¿Qué comportamiento espera? Llamar al system('notepad') funciona bien, simplemente no muestra la GUI. Se ejecuta en segundo plano, y PHP se queda allí esperando pacientemente que el bloc de notas se cierre solo (y solo continúa si matas el bloc de notas de la lista de procesos).

Si espera que aparezca una GUI, estoy bastante seguro de que no puede hacer eso. ;) Una opción podría ser escribir un script por lotes (file_put_contents('runme.bat', 'notepad hello.txt')) y hacer que el script por lotes en cola (con el programador de Windows o cualquiera que sea el cron-equivalent en Windows) se ejecute de manera asíncrona (y borrarse al final).

+0

Veo lo que quiere decir. Estás en el bloc de notas correcto sin una GUI. (Mi configuración se agotó después de 60 segundos). Por lo tanto, no puedo iniciar un programa basado en GUI desde PHP y tengo que recurrir a soluciones basadas en SO. Es bueno saberlo. Gracias ! – sdfor

17

Última respuesta tardía, pero estaba trabajando en esto y descubrí que sí es posible ejecutar un programa GUI desde PHP con el servidor Apache en Windows XP.

  • Inicio> Ejecutar, escriba "services.msc" para que aparezca de control de servicios (otras maneras de llegar allí, esto es más fácil OMI)
  • localizar su servicio de Apache (el mío se llama "wampapache" usando WampServer 2.0)
  • Abrir las propiedades del servicio (doble clic o derecha click-> propiedades)
  • tirón a la Log On cuenta y garantizar la casilla de verificación titulado "Permitir servicio para interactuar con el escritorio" se comprobado
  • tirón volver a la pestaña General, detener el servicio, st arte el servicio

Ahora, utilizando el siguiente código, puede engendrar procesos de UI desde PHP. En el primer fragmento de código, el script no esperará a que la aplicación se cierre; el segundo fragmento espera a que el programa se cierre antes de continuar (bloqueo).

no espere a que la aplicación:

pclose(popen("start /B notepad.exe", "r"));

Espere aplicación:

system('start notepad.exe');

Esto ha sido probado en Windows XP. No lo he probado en ninguna otra versión de Windows, su millage puede variar.

Nota al margen En mi instalación en particular, yo estaba usando la otra opción en la pestaña Iniciar sesión del servicio - Apache se ejecuta como un usuario de dominio para que pudiera tener acceso a varios recursos compartidos de red con permisos de usuario de dominio. La casilla de verificación no está disponible para esa opción, solo cuando el servicio se ejecuta como Sistema local. Después de una extensa investigación, descubrí que simplemente no hay forma de que un solo servicio pueda interactuar con el escritorio actual Y utilizar las credenciales de un usuario específico. Es una propuesta de uno o el otro, con la solución sugerida es dividir su servicio en dos componentes: uno que utiliza los privilegios de la cuenta de usuario y otro que interactúa con el escritorio. No es muy práctico cuando el servicio que está hablando es el servidor web. Esta nota es probablemente bastante específica para mi caso de uso, pero quería ponerlo aquí en caso de que pueda salvar a alguien la frustración en el futuro.

+2

Tengo curiosidad sobre cómo esto consiguió 10 votos positivos: todavía solo ejecuta el bloc de notas como proceso en segundo plano para mi configuración, aunque lo tengo en "interactuar con el escritorio". Estoy usando Windows 7. – user24601

+0

@ user24601 Esto solo ha sido probado para Windows XP. Tomaré nota de eso en la respuesta. En cuanto a los upvotes ... ¿a quién le importa? –

+0

Funciona bien en Windows 7 – mpyw

12

Otra respuesta muy tarde, pero esto sale en Google al buscar por "ejecución del programa GUI php" ...

he sido capaz de lanzar una aplicación de interfaz gráfica de usuario en Windows 8.1 al hacer, correr y eliminación de una tarea programada:

shell_exec('SCHTASKS /F /Create /TN _notepad /TR "notepad.exe" /SC DAILY /RU INTERACTIVE'); 
shell_exec('SCHTASKS /RUN /TN "_notepad"'); 
shell_exec('SCHTASKS /DELETE /TN "_notepad" /F'); 
+0

Tengo Windows 7 e intenté otras respuestas mientras no se pudo iniciar la interfaz gráfica pero esta funciona perfectamente. –

+0

también ha estado batallando en Win10 sin que ninguna de las soluciones funcione, esto funciona 100% +1 para outthebox .. – l0ft13

+0

¿Cómo abrir carpetas locales, es decir, sistema de archivos? –

Cuestiones relacionadas