web-dev-qa-db-fra.com

Adobe AIR pour exécuter le programme

Je voudrais appuyer sur un bouton d'une application Adobe AIR et exécuter un programme installé. Par exemple, j'aurais un bouton nommé "Démarrer Winamp". Lorsque vous appuyez dessus, Winamp.exe doit démarrer directement ... Je ne veux pas que quelque chose en ligne de commande soit exécuté, je veux seulement qu'un exe démarre. Ou ... est-ce la même chose? S'il vous plaît, laissez-moi savoir si cela est possible.

Je vous remercie.

32
Manny Calavera

Il n'y a pas de moyen direct de le faire. Essayez CommandProxy .

Lisez très attentivement le blog. Vous devez vraiment créer deux projets différents: un exécutable de système d'exploitation natif et une application AIR. L'exécutable natif lance votre application AIR. L’application AIR demande à son tour à l’exécutable de traiter les demandes au niveau du système d’exploitation. 

Téléchargez le code source à partir de Google Code et créez deux projets - un Visual Studio/Mono pour l’exemple C # exe et un autre - pour l’application AIR. Ici est un lien qui décrit comment configurer l'ancien.

Dans le fichier MXML principal de votre application AIR, vous devez procéder comme suit:

  • Créez un objet CommandProxy, ajoutez quelques écouteurs d'événement pour la détection de connexion, et Command réponse et erreur.

  • Connectez-vous à l'exe natif via un appel connect

  • Dans le gestionnaire d'événements pour connect, créez une nouvelle Commande.g. ScreenshotCommand et l'exécuter (via la méthode CommandProxy.execute)

... et c'est tout!

J'espère que cela t'aides. 

11
dirkgently

Avec AIR 2.0, vous pouvez maintenant:

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);

}

Vous devez également ajouter ceci à votre fichier de descripteur.

<supportedProfiles>extendedDesktop</supportedProfiles> 
65
JD Isaacks

La réponse est en deux parties. Premièrement, si vous DEVEZ réellement exécuter un fichier .exe, la seule solution consiste à utiliser un proxy de commande. Personnellement, en utiliser un en .Net/Mono est un peu exagéré. Je ne connais pas Mono, mais demander à vos utilisateurs d'installer .Net et AIR les effraierait presque tous. De plus, si j'allais demander aux utilisateurs d'installer Mono, pourquoi ne pas écrire simplement l'interface utilisateur dans Mono et en finir avec ...?

Vous pourriez écrire un simple proxy de commande en Ruby qui serait vraiment multi-plateforme et facile en environ 5 minutes (je viens de le faire, si vous voulez que le code me commente ici et je le posterai). Si vous voulez contrôler le processus après son lancement, c'est une entreprise plus sérieuse. Pour la distribution, etc., je pense que Ruby serait plus facile.

D'autre part , vérifiez cette idée . Jeff suggère d'utiliser une demande d'URL d'AIR. En gros, si votre navigateur l’interprète correctement, vous êtes prêt. Le code ressemble à ceci

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

Je pense qu’avec un peu de créativité (avec les types Mime en particulier), cette seconde solution pourrait même fonctionner pour Winamp (par exemple, une liste de lecture ou quelque chose du genre).

Bonne chance et merci pour la question, qui est probablement une dupe mais Google n'a trouvé que celle-ci, alors vous avez gagné :)

4
Dan Rosenstark

Je pense que FluorineFx fait ce que vous voulez: http://aperture.fluorinefx.com/?p=5

3
user106085

AIR 2.0 aura cette capacité.

Il devrait sortir en version bêta d’ici la fin de l’année (2009) et être expédié au premier semestre de 2010.

http://blogs.Adobe.com/air/2009/10/previewing_Adobe_air_2_at_adob.html

API de processus natif À partir de AIR 2, les développeurs auront accès à une API de processus natif qui permettra aux applications d'appeler et de communiquer avec des applications natives sur la machine locale. Afin de préserver la nature multiplate-forme du format de fichier .air, les applications qui tirent parti de l'API de processus natif doivent être déployées en tant qu'installateurs natifs tels que .exe et .dmg. Le SDK d’exécution AIR inclura la prise en charge de la génération d’installateurs natifs de base.

3
user207377

Voir cet article de blog: Exécuter un fichier exe à partir d'AIR

Court résumé: 

"Si vous avez vraiment besoin d'exécuter des fichiers exe Externes et qu'il n'y a pas d'autre moyen De résoudre votre problème, vous devrez Vous assurer que l'utilisateur exécute ce [.____. .] autre logiciel avant de lancer l'application AIR. "

1
Assaf Lavie

Pour le moment, il n’ya aucun moyen de le faire en mode natif avec AIR. Il y a quelques options, cependant:

  • Shu
  • Red5 en cours d'exécution sur localhost
  • Créez un service qui s'exécute sur la machine de l'utilisateur et connectez-vous à l'aide de sockets .
1
Rhys Causey

Une autre façon de procéder consiste à lancer un serveur Web simple sur une machine locale (en arrière-plan) et à appeler ses méthodes à l'aide de HTTPService.

Le serveur Web d’arrière-plan pourrait par exemple être en python: http://fragments.turtlemeat.com/pythonwebserver.php

Et il peut lancer des exécutables et fournir des fonctionnalités qu'AIR ne peut pas.

Cela permet de garder le code Flex propre car il implémente uniquement l'interface REST et le langage python (ou un autre langage) le reste du travail. Vous pouvez également tirer parti de l’utilisation de python en tant qu’interface avec la base de données sqlite ou de lancer Django en tant que serveur Web.

Le seul inconvénient est que le serveur doit déjà fonctionner sur localhost .. et écouter un port (c'est-à-dire 81). vous pouvez probablement le faire en lançant le serveur au démarrage du système.

Ce n'est pas la meilleure façon, mais dans certains cas, cela pourrait aider votre projet comme il l'a fait pour moi.

1
Redliner

sous mac os x, si vous souhaitez lancer un fichier .app, vous devez écrire ce qui suit pour le chemin du fichier. (Supposons que le nom de l'application est 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);

}
0
umut demirel

Ou simple, mon site crée un programme d'installation personnalisé pour une nouvelle application en savoir plus

http://board.flashkit.com/board/showthread.php?834579-Embed-exe-file-from-swf-to-write-tir-local-directory

Conseil bonus: Nous vous recommandons d’utiliser Enigma Virtual Box car il est gratuit et très utile pour la virtualisation d’applications ou Exe-Packer comme BoxedApp Packer mais coûte beaucoup plus cher qu’Enigma Virtual Box Merci!

0
SourceSkyBoxer