Adobe AIR для запуска программы - PullRequest
32 голосов
/ 23 марта 2009

Я хочу нажать кнопку в приложении Adobe AIR и запустить установленную программу. Например, у меня была бы кнопка с именем «Start Winamp». Когда эта кнопка нажата, она должна запускать Winamp.exe напрямую ... Я не хочу, чтобы выполнялась какая-то командная строка, я только хочу запустить exe-файл. Или ... это одно и то же? Пожалуйста, дайте мне знать, если это возможно.

Спасибо.

Ответы [ 10 ]

65 голосов
/ 17 декабря 2009

С AIR 2.0 теперь вы можете:

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

}

Вам также необходимо добавить это в файл дескриптора.

<supportedProfiles>extendedDesktop</supportedProfiles> 
11 голосов
/ 23 марта 2009

Нет прямого способа сделать это. Попробуйте CommandProxy .

Внимательно прочитайте сообщение в блоге. Вам действительно нужно создать два разных проекта: собственный исполняемый файл ОС и приложение AIR. Собственный исполняемый файл запускает ваше приложение AIR. Приложение AIR, в свою очередь, запрашивает исполняемый файл для обработки запросов на уровне ОС.

Загрузите исходный код из Google Code и создайте два проекта - Visual Studio / Mono для образца C # exe и другой - для приложения AIR. Здесь - ссылка, которая описывает, как настроить первый.

В основном файле MXML приложения AIR необходимо выполнить следующие действия:

  • Создайте объект CommandProxy, добавьте несколько прослушивателей событий для обнаружения соединения и Command ответ и ошибку.

  • Подключение к нативному файлу через connect вызов

  • В обработчике событий для connect создайте новый Command, например. ScreenshotCommand и выполнить его (методом CommandProxy.execute)

... и все тут!

Надеюсь, это поможет.

4 голосов
/ 20 июля 2009

Ответ состоит из двух частей. Во-первых, если вы действительно ДОЛЖНЫ запустить файл .exe, единственный способ - использовать командный прокси. Лично использование одного в .Net / Mono немного преувеличено. Я не знаю Mono, но если вы попросите своих пользователей установить .Net и AIR, это отпугнет почти всех из них. Плюс, если я собирался попросить пользователей установить Mono, почему бы просто не написать пользовательский интерфейс в Mono и покончить с этим ...?

Вы могли бы написать простой командный прокси в Ruby, который действительно был бы кроссплатформенным и занимал мало времени за 5 минут (я просто сделал это, если вы хотите, чтобы код прокомментировал меня здесь, и я опубликую его). Если вы хотите контролировать процесс после его запуска, это более серьезное начинание. Я думаю, что с Ruby будет проще.

С другой стороны , проверить эту идею . Джефф предлагает использовать URL-запрос от AIR. По сути, если ваш браузер правильно его интерпретирует, вы готовы к работе. Код выглядит так

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

Я думаю, что при небольшом творческом потенциале (особенно с типами Mime) это второе решение может даже работать на Winamp (например, список воспроизведения или что-то в этом роде).

Удачи и спасибо за вопрос, который, вероятно, является обманом, но Google нашел только этот, поэтому вы выиграли:)

3 голосов
/ 10 ноября 2009

AIR 2.0 будет иметь эту возможность.

Ожидается, что он выйдет в бета-версии к концу года (2009) и выйдет в первой половине 2010 года.

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

API собственного процесса Начиная с AIR 2, разработчики получат доступ к собственному процессу API, который позволит приложениям вызывать и взаимодействовать с собственными приложениями на локальном компьютере. Чтобы сохранить кроссплатформенную природу формата файлов .air, приложения, использующие преимущества API собственных процессов, должны быть развернуты как собственные установщики, такие как .exe и .dmg. SDK среды выполнения AIR будет включать поддержку создания базовых собственных установщиков.

3 голосов
/ 05 августа 2009

Я думаю, что FluorineFx делает то, что вы хотите: http://aperture.fluorinefx.com/?p=5

1 голос
/ 10 февраля 2010

Еще один способ сделать это - запустить простой веб-сервер на локальном компьютере (в фоновом режиме) и вызвать его методы с помощью HTTPService.

Фоновый веб-сервер может быть, например, на python: http://fragments.turtlemeat.com/pythonwebserver.php

Кроме того, он может запускать исполняемые файлы и предоставлять функции, недоступные в AIR.

Это обеспечивает чистоту кода Flex, поскольку он реализует только интерфейс REST и Python (или другой язык) для остальной части работы. Вы также можете получить выгоду от использования python в качестве интерфейса к базе данных sqlite или можете запустить весь django в качестве веб-сервера.

Единственным недостатком является то, что сервер уже должен работать на локальном хосте .. и прослушивать какой-то порт (например, 81). Вы, вероятно, можете сделать это, запустив сервер при запуске системы.

Это не лучший способ, но в некоторых случаях он может помочь вашему проекту, как он сделал для меня.

1 голос
/ 23 марта 2009

Прямо сейчас, нет способа сделать это изначально с AIR. Однако есть несколько вариантов:

  • Shu
  • Red5 работает на локальном хосте
  • Создайте сервис, работающий на компьютере пользователя, и подключитесь к нему с помощью сокетов .
1 голос
/ 23 марта 2009

Смотрите это сообщение в блоге: Запустите исполняемый файл из AIR

Краткое резюме:

"Если вам действительно нужно запустить внешний exe файлы, а другого пути нет решения вашей проблемы, тогда вы будете убедитесь, что пользователь запускает другое программное обеспечение перед запуском Приложение AIR. "

0 голосов
/ 06 октября 2015

Или просто мой веб-сайт создает специальный установщик для нового приложения. Подробнее

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

Бонусный совет: Мы рекомендуем вам использовать Enigma Virtual Box, потому что он бесплатный и очень хорош для виртуализации приложений или Exe-Packer, например BoxedApp Packer, но стоит намного дороже, чем Enigma Virtual Box. Спасибо!

0 голосов
/ 27 сентября 2013

в Mac OS X, если вы хотите запустить файл .app, то вы должны написать следующее для пути к файлу. (Предположим, что имя приложения - ххх)

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...