2009-03-23 25 views
32

Me gustaría presionar un botón de una aplicación Adobe AIR y ejecutar algún programa instalado. Por ejemplo, tendría un botón llamado "Iniciar Winamp". Cuando se presiona esto, debe iniciar Winamp.exe directamente ... No quiero que se ejecute algo de línea de comandos, solo quiero que se inicie un exe. O es la misma cosa ? Por favor, avíseme si esto es posible.Adobe AIR para ejecutar el programa

Gracias.

+0

Sin ofender, pero se lo han pedido. – dkretz

+6

@Le dorfier, ¿Dónde? Creo que esta es la primera pregunta de esta pregunta. –

+1

¿Consideraría revisar la pregunta aceptada ahora que existe NativeProcess? – Jono

Respuesta

10

No hay forma directa de hacerlo. Pruebe CommandProxy.

Lea la publicación del blog con mucho cuidado. Realmente necesita crear dos proyectos diferentes: un ejecutable de sistema operativo nativo y una aplicación de AIR. El ejecutable nativo activa su aplicación de AIR. La aplicación AIR, a su vez, solicita que el ejecutable procese las solicitudes de nivel de sistema operativo.

Descargue la fuente desde Google Code y cree dos proyectos: un Visual Studio/Mono para la muestra C# exe y otro para la aplicación AIR. Here es un enlace que describe cómo configurar el primero.

En archivo MXML principal de su aplicación AIR, deberá hacer lo siguiente:

  • crear un objeto CommandProxy, añadir unos detectores de eventos, para la detección de la conexión, y Command respuesta y error.

  • Conecta con el exe nativo a través de una llamada

  • connect En el controlador de eventos para connect, crear un nuevo ejemplo CommandScreenshotCommand y ejecutarlo (a través de CommandProxy.execute método)

... y eso es todo!

Espero que esto ayude.

+0

Realmente no sé cómo hacerlo funcionar. ¿Tienes un ejemplo de trabajo? Thnks –

+1

CommandProxy? ¿Qué problemas estás enfrentando? No tengo nada listo, pero puedo intentarlo más tarde mañana. – dirkgently

+0

Simplemente no sé cómo ... comenzar todo ... qué archivos usar ... cómo compilar correctamente. Realmente necesito un ejemplo de algo de AIR enviando un comando como "calc" en Windows. Thnank tu! –

1

Ver esta entrada del blog: Run an exe file from AIR

Breve resumen:

"Si realmente necesita para funcionar archivos ejecutables externos, y no hay otra manera de resolver su problema, entonces se asegúrese de que el usuario ejecuta ese otro software antes de iniciar la aplicación AIR. "

1

En este momento, no hay forma de hacerlo de forma nativa con AIR. Hay algunas opciones, sin embargo:

  • Shu
  • Red5 se ejecuta en localhost
  • crear un servicio que se ejecuta en la máquina del usuario y conectarse a él utilizando sockets.
4

La respuesta viene en dos partes. Uno, si realmente DEBE ejecutar un archivo .exe, la única manera de hacerlo es usar un proxy de comando. Personalmente, usar uno en .Net/Mono es un poco exagerado.No sé Mono, pero pedirles a sus usuarios que instalen .Net y AIR les daría miedo a todos ellos. Además, si iba a pedirles a los usuarios que instalen Mono, ¿por qué no simplemente escribir la interfaz de usuario en Mono y terminar con eso ...?

Podrías escribir un proxy de comando simple en Ruby que realmente sería multiplataforma y poco molesto en unos 5 minutos (lo acabo de hacer, si quieres que el código me comente aquí y lo publique). Si quieres controlar el proceso después de su lanzamiento, es un esfuerzo más serio. Para la distribución, etc., creo que Ruby sería más fácil.

Por otro lado, check this idea out. Jeff sugiere usar una solicitud de URL de AIR. Básicamente, si su navegador lo interpreta correctamente, ya está listo para comenzar. El código es el siguiente

var request : URLRequest = new URLRequest('C:\\playlists\\test.m3u'); 

Creo que, con un poco de creatividad (con tipos MIME, en particular), esta segunda solución podría incluso trabajar para Winamp (por ejemplo .., una lista de reproducción o algo así).

Buena suerte y gracias por la pregunta, que es probablemente una víctima, pero Google sólo encontró éste por lo que has ganado :)

3

AIR 2.0 tendrá esta capacidad.

Se espera que salga en beta a finales de año (2009) y enviar la primera mitad de 2010.

http://blogs.adobe.com/air/2009/10/previewing_adobe_air_2_at_adob.html

API de procesos nativo A partir de AIR 2, los desarrolladores tendrán acceso a una API de proceso nativo que permitirá a las aplicaciones invocar y comunicarse con aplicaciones nativas en la máquina local. Para preservar la naturaleza multiplataforma del formato de archivo .air, las aplicaciones que aprovechan la API de proceso nativa deben implementarse como instaladores nativos, como .exe y .dmg. El SDK de tiempo de ejecución de AIR incluirá soporte para generar instaladores nativos básicos.

65

Con AIR 2.0 ahora puede:

if(NativeProcess.isSupported) 
{ 
    var file:File = File.desktopDirectory; 
    file = file.resolvePath("StyleLookupold.exe"); 

    var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo(); 
    nativeProcessStartupInfo.executable = file; 
    var process:NativeProcess = new NativeProcess(); 

    process.start(nativeProcessStartupInfo); 

} 

También es necesario agregar esto a su archivo descriptor.

<supportedProfiles>extendedDesktop</supportedProfiles> 
+0

Sí, eso funciona. – rafalry

+0

¿dónde está el archivo descriptor? Estoy usando flash CS5 – Lucas

+2

@Lucas Buena pregunta, en Flash CS5 querrá ir a 'Archivo> Configuración de Adobe Air 2' Habrá una sección llamada ** Perfiles: ** con 4 casillas de verificación. Asegúrese de que * Extended Desktop * sea el único marcado. –

1

Otra forma de hacer esto es el lanzamiento de servidor web sencilla en la máquina local (en el fondo), y lo llaman es utilizando métodos HTTPService.

El servidor web de fondo podría ser por ejemplo en Python: http://fragments.turtlemeat.com/pythonwebserver.php

Y puede lanzar ejecutable y proporcionar la funcionalidad que el aire no puede.

Esto mantiene el código Flex limpio porque solo implementa la interfaz REST y python (u otro idioma) el resto del trabajo. También puede beneficiarse del uso de python como una interfaz para la base de datos sqlite o puede iniciar django completo como un servidor web.

El único inconveniente es que el servidor ya debe estar ejecutándose en localhost ... y escuchando algún puerto (es decir, 81). probablemente puedas hacer esto iniciando el servidor al inicio del sistema.

No es la mejor manera, pero en algunos casos podría ayudar a su proyecto como lo hizo por mí.

0

en mac os x, si desea iniciar un archivo .app, debe escribir lo siguiente para la ruta del archivo. (Suponga que el nombre de la aplicación es xxx)

if(NativeProcess.isSupported) 
{ 
    //not correct 
    //file = file.resolvePath("/Applications/xxx.app"); 

    //correct 
    file = file.resolvePath("/Applications/xxx.app/Contents/MacOS/xxx"); 

    var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo(); 
    nativeProcessStartupInfo.executable = file; 
    var process:NativeProcess = new NativeProcess(); 

    process.start(nativeProcessStartupInfo); 

} 
Cuestiones relacionadas