2009-03-23 14 views
32

Chciałbym nacisnąć przycisk z aplikacji Adobe AIR i uruchomić jakiś zainstalowany program. Na przykład, mam przycisk o nazwie "Uruchom Winamp". Gdy zostanie naciśnięty, powinien bezpośrednio uruchomić program Winamp.exe ... Nie chcę, aby coś z linii poleceń zostało wykonane, chcę tylko uruchomić exe. Czy ... czy to to samo? Proszę, daj mi znać, jeśli to możliwe.Adobe AIR do wykonania programu

Dziękuję.

+0

Bez obrazy, ale zostało zadane. – dkretz

+6

@Le dorfier, Gdzie? Myślę, że to pierwsze pytanie z tego pytania. –

+1

Czy rozważyłbyś ponowne zaakceptowanie zaakceptowanego pytania teraz, gdy istnieje NativeProcess? – Jono

Odpowiedz

10

Nie ma bezpośredniego sposobu na zrobienie tego. Wypróbuj CommandProxy.

Przeczytaj uważnie wpis na blogu. Naprawdę potrzebujesz stworzyć dwa różne projekty: natywny plik wykonywalny systemu operacyjnego i aplikację AIR. Natywny plik wykonywalny uruchamia aplikację AIR. Z kolei aplikacja AIR żąda, aby plik wykonywalny przetwarzał żądania na poziomie systemu operacyjnego.

Pobierz źródło z Google Code i utwórz dwa projekty - Visual Studio/Mono dla przykładowego C# exe i innego - dla aplikacji AIR. Here to łącze opisujące sposób konfiguracji pierwszego.

W głównym pliku MXML swoim Gościom aplikacji, należy wykonać następujące czynności:

  • Tworzenie CommandProxy obiektu, dodać kilka detektorów zdarzeń, do wykrywania połączenia, a Command odpowiedzi i błędów.

  • Połącz z natywnym exe za pośrednictwem connect rozmowy

  • programu obsługi zdarzeń dla connect, tworzyć nowe Command np ScreenshotCommand i wykonać go (poprzez CommandProxy.execute metoda)

... i to jest to!

Mam nadzieję, że to pomoże.

+0

Naprawdę nie wiem, jak to działa. Czy masz działający przykład? Thnks –

+1

CommandProxy? Jakie problemy napotykasz? Nie mam nic gotowego, ale mogę spróbować jeszcze jutro. – dirkgently

+0

Po prostu nie wiem jak ... zacząć wszystko ... jakie pliki użyć ... jak poprawnie skompilować. Naprawdę potrzebuję przykład czegoś z AIR wysyłając polecenie takie jak "calc" w systemie Windows. Thnank ty! –

1

Zobacz ten post na blogu: Run an exe file from AIR

Krótkie podsumowanie:

„Jeśli naprawdę trzeba uruchomić zewnętrznych exe ​​pliki, a nie ma innego sposobu rozwiązywania problemu, wtedy upewnij się, że użytkownik uruchomił to inne oprogramowanie przed uruchomieniem aplikacji AIR . "

1

W tej chwili nie można tego zrobić natywnie w środowisku AIR. Istnieje kilka opcji, ale:

  • Shu
  • Red5 działa na localhost
  • Utwórz usługę, która działa na komputerze użytkownika i połączyć się z nim za pomocą sockets.
4

Odpowiedź jest podzielona na dwie części. Po pierwsze, jeśli naprawdę MUSISZ uruchamiać plik .exe, jedynym sposobem jest użycie serwera proxy poleceń. Osobiście, używanie jednego z .Net/Mono jest nieco przesadzone.Nie znam Mono, ale poproszę twoich użytkowników o zainstalowanie .Net i AIR przestraszyłoby ich wszystkich. Dodatkowo, gdybym chciał poprosić użytkowników o zainstalowanie Mono, dlaczego nie napisać interfejsu użytkownika w Mono i zrobić z tym ...?

Możesz napisać prostą komendę proxy w Ruby, która naprawdę byłaby wieloplatformowa i mało kłopotliwa w około 5 minut (po prostu to zrobiłem, jeśli chcesz, żeby kod skomentował mnie tutaj, a ja to opublikuję). Jeśli chcesz kontrolować proces po jego uruchomieniu, jest to poważniejsze przedsięwzięcie. Dla dystrybucji itp. Uważam, że Ruby byłaby łatwiejsza.

Z drugiej strony, check this idea out. Jeff sugeruje użycie żądania adresu URL ze środowiska AIR. Zasadniczo, jeśli twoja przeglądarka zinterpretuje to poprawnie, jesteś gotowy do pracy. Kod wygląda następująco

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

myślę, że z odrobiną kreatywności (z typów MIME, w szczególności), to drugie rozwiązanie może pracować nawet do Winampa (np .., listy odtwarzania lub coś).

Powodzenia i dziękuję za to pytanie, które jest prawdopodobnie dupe ale Google tylko, że ten jeden tak już wygrał :)

3

AIR 2.0 będzie miał taką możliwość.

się spodziewać, wyjdzie w wersji beta przed końcem roku (2009) i wysyła pierwszej połowie 2010.

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

Native proces API Począwszy AIR 2, deweloperzy będą mieć dostęp do natywny proces API, który umożliwi aplikacjom wywoływanie i komunikowanie się z natywnymi aplikacjami na lokalnym komputerze. Aby zachować charakter platformy w wielu platformach .air, aplikacje korzystające z natywnego API procesu muszą być wdrożone jako rodzime instalatory, takie jak .exe i .dmg. Zestaw SDK środowiska wykonawczego AIR zawiera obsługę generowania podstawowych rodzimych instalatorów.

65

z powietrzem 2.0 Teraz można:

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

} 

Należy również dodać do pliku deskryptora.

<supportedProfiles>extendedDesktop</supportedProfiles> 
+0

Tak, to działa !! – rafalry

+0

gdzie jest plik deskryptora? Używam flasha CS5 – Lucas

+2

@Lucas Dobre pytanie, w Flash CS5 będziesz chciał przejść do "Plik> Ustawienia Adobe Air 2" Pojawi się sekcja o nazwie ** Profile: ** z 4 polami wyboru. Upewnij się, że * Rozszerzony pulpit * jest jedynym zaznaczonym. –

1

Innym sposobem osiągnięcia tego celu jest uruchomienie prosty serwer WWW na komputerze lokalnym (w tle), i nazywają to metody wykorzystujące HTTPService.

Tło serwer WWW może być na przykład w Pythonie: http://fragments.turtlemeat.com/pythonwebserver.php

I może uruchomić pliki wykonywalne i zapewniają funkcjonalność, że powietrze nie może.

Dzięki temu kod Flex jest czysty, ponieważ implementuje tylko interfejs REST i pythona (lub inny język) do końca pracy. Możesz również skorzystać z używania pythona jako interfejsu do bazy danych sqlite lub możesz uruchomić całe django jako serwer WWW.

Jedyną wadą jest to, że serwer musi już działać na localhost .. i słuchać jakiegoś portu (np. 81). prawdopodobnie możesz to zrobić, uruchamiając serwer przy uruchomieniu systemu.

To nie jest najlepszy sposób, ale w niektórych przypadkach może pomóc Twojemu projektowi tak jak dla mnie.

0

w systemie Mac OS X, jeśli chcesz uruchomić plik .app, musisz wpisać następującą ścieżkę pliku. (Załóżmy, że nazwa aplikacji jest 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); 

}