我想按下Adobe AIR应用程序中的按钮并执行一些已安装的程序。例如,我会有一个名为“Start Winamp”的按钮。当它被按下它应该直接启动Winamp.exe ...我不希望执行一些命令行的事情,我只想要一个exe启动。或者......是一回事吗?如果可能,请告诉我。
谢谢。
答案 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
调用
在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)
答案 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)
或者简单的我的网站为新应用程序创建自定义安装程序阅读更多
额外提示: 我们建议您使用Enigma Virtual Box,因为它是免费的,它非常适合像BoxedApp Packer这样的Application Virtualization或Exe-Packer,但它的成本远高于Enigma Virtual Box,谢谢!