Adobe AIR执行程序

时间:2009-03-23 02:06:30

标签: flash flex air command

我想按下Adobe AIR应用程序中的按钮并执行一些已安装的程序。例如,我会有一个名为“Start Winamp”的按钮。当它被按下它应该直接启动Winamp.exe ...我不希望执行一些命令行的事情,我只想要一个exe启动。或者......是一回事吗?如果可能,请告诉我。

谢谢。

10 个答案:

答案 0 :(得分:65)

使用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> 

答案 1 :(得分:11)

没有直接的方法。试试CommandProxy

仔细阅读博客文章。您确实需要创建两个不同的项目:本机OS可执行文件和AIR应用程序。本机可执行文件会激活AIR应用程序。 AIR应用程序反过来请求可执行文件处理操作系统级别的请求。

Google Code下载源代码,并为AIR应用程序创建两个项目 - 示例C#exe的Visual Studio / Mono和另一个项目。 Here是一个描述如何设置前者的链接。

在AIR应用的主MXML文件中,您需要执行以下操作:

  • 创建CommandProxy对象,添加一些事件侦听器,用于连接检测,以及Command响应和错误。

  • 通过connect调用

  • 连接到本机exe
  • connect的事件处理程序中,创建一个新的Command,例如ScreenshotCommand并执行它(通过CommandProxy.execute方法)

......就是这样!

希望这会有所帮助。

答案 2 :(得分:4)

答案分为两部分。一,如果你真的必须运行.exe文件,唯一的办法就是使用命令代理。就个人而言,使用.Net / Mono中的一个有点夸张。我不知道Mono,但要求你的用户安装.Net AIR会吓跑所有人。另外,如果我要让用户安装Mono,为什么不用Mono编写UI并完成它?...

你可以在Ruby中编写一个简单的命令代理,它可以在大约5分钟内实现跨平台和低麻烦(我只是这样做,如果你想让代码在这里发表评论,我会发布它)。如果您希望在启动后控制流程,那么这是一项更为严肃的工作。对于发行等,我相信Ruby会更容易。

另一方面check this idea out。 Jeff建议使用AIR的URL请求。基本上,如果您的浏览器正确解释它,您就可以开始了。代码看起来像这样

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

我认为,有了一点创造力(尤其是Mime类型),这第二种解决方案甚至可能适用于Winamp(例如,播放列表或其他内容)。

祝你好运并感谢你提出这个问题,这可能是一个骗局,但谷歌只发现了这个,所以你赢了:)

答案 3 :(得分:3)

我认为FluorineFx可以满足您的需求:http://aperture.fluorinefx.com/?p=5

答案 4 :(得分:3)

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。 AIR运行时SDK将包括对生成基本本机安装程序的支持。

答案 5 :(得分:1)

请参阅此博文:Run an exe file from AIR

简短摘要:

  

“如果你真的需要外部运行   exe文件,没有别的办法   解决你的问题,然后你会   确保用户运行该程序   启动之前的另一个软件   AIR应用程序。“

答案 6 :(得分:1)

现在,AIR没有办法本机化。但是有一些选择:

  • Shu
  • Red5在localhost上运行
  • 创建一个在用户计算机上运行的服务,并使用sockets连接到该服务。

答案 7 :(得分:1)

另一种方法是在本地计算机上启动简单的Web服务器(在后台),并使用HTTPService调用它的方法。

后台网络服务器可以是例如在python中: http://fragments.turtlemeat.com/pythonwebserver.php

它可以启动可执行文件并提供AIR无法实现的功能。

这使得Flex代码保持干净,因为它只实现了REST接口和python(或其他语言)的其余工作。您还可以使用python作为sqlite数据库的接口,也可以将整个django作为Web服务器启动。

唯一的缺点是服务器必须已经在localhost上运行..并且正在侦听某个端口(即81)。您可以通过在系统启动时启动服务器来实现此目的。

这不是最好的方式,但在某些情况下,它可以帮助你的项目,就像它为我做的那样。

答案 8 :(得分:0)

在mac os x中,如果要启动.app文件,则必须为文件路径编写以下内容。 (假设应用程序的名称是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);

}

答案 9 :(得分:0)

或者简单的我的网站为新应用程序创建自定义安装程序阅读更多

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

额外提示: 我们建议您使用Enigma Virtual Box,因为它是免费的,它非常适合像BoxedApp Packer这样的Application Virtualization或Exe-Packer,但它的成本远高于Enigma Virtual Box,谢谢!