Pregunta

Tenemos una aplicación que hemos creado como un paquete y queremos iniciarla desde otro proceso.

¿Cómo deberíamos hacerlo?Por lo que tengo entendido podemos usar openUrls(), openFile() o execve() pero no sé cuál nos conviene más.

Gracias

¿Fue útil?

Solución

Ya que estás hablando de un solicitud, no desea pasar por los mecanismos de asociación de archivos.Son para abrir documentos, imágenes, etc.con una aplicación adecuada.Como parece que no estás seguro de qué preguntar, te recomiendo que lo hagas de forma sencilla:

El exec* La familia lanza un ejecutable directamente.Pero tenga en cuenta que reemplaza el proceso de inicio con la aplicación iniciada.Su lanzador dejará de ejecutarse en ese momento.Si desea que el iniciador continúe ejecutándose, desea utilizar algo que inicie un subproceso.La forma de bajo nivel es fork/vfork seguido por exec, pero es mucho más sencillo iniciar tu aplicación con system, que se encarga de todo eso detrás de escena.(Suponiendo que no haya preocupaciones de seguridad acerca de que los usuarios del otro lado del mundo inyecten rutas de ejecución).

Si el iniciador no finaliza tan pronto como inicia su aplicación, querrá pensar si se "bloquea" hasta que finalice la aplicación iniciada o si inicia la aplicación de forma asincrónica, para que luego se ejecuten en paralelo.El iniciador también podría "esperar" el valor de retorno de la aplicación, para comprobar si tuvo éxito y tal vez hacer algo después.Hay formas de hacer todo eso, pero como no sabemos lo que necesita, no entraré en detalles.

En breve: Si el único trabajo de su iniciador es iniciar su aplicación, use execl.Si su lanzador necesita hacer más, use system.Si ninguno de ellos se adapta a sus necesidades, deberá proporcionar más información, empezando por el idioma en el que está escrito su iniciador.

PD.Ambos tienen la ventaja de la generalidad y la portabilidad.Funcionan para aplicaciones GUI y de línea de comandos, y funcionarán en cualquier sistema tipo Unix y, hasta cierto punto, en Windows.No es necesario encerrarse en Cocoa para algo tan simple.

Otros consejos

Si estás usando cacao, puedes usar NSWorkspace's -launchApplication:.

de la documentación OSX en Nsworkspaces :

  • OpenFile: abre el archivo especificado especificado usando la aplicación predeterminada asociada con su tipo.
  • OpenURL: abre la ubicación en la URL especificada.

Con URL, puede abrir también Archivo en FTP, o HTTP, por ejemplo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top