Adobe AIR 执行程序
Posted
技术标签:
【中文标题】Adobe AIR 执行程序【英文标题】:Adobe AIR to execute program 【发布时间】:2010-10-14 21:28:35 【问题描述】:我想从 Adobe AIR 应用程序中按下一个按钮并执行一些已安装的程序。例如,我会有一个名为“Start Winamp”的按钮。当按下它时,它应该直接启动 Winamp.exe...我不想执行一些命令行的东西,我只想启动一个 exe。或者……是一样的吗?请让我知道这是否可行。
谢谢。
【问题讨论】:
无意冒犯,但有人问过了。 @Le dorfier,在哪里?我想这是第一次问这个问题。 既然 NativeProcess 存在,您会考虑修改已接受的问题吗? 【参考方案1】:借助 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>
【讨论】:
描述符文件在哪里?我正在使用 Flash CS5 @Lucas 好问题,在 Flash CS5 中,您需要转到File>Adobe Air 2 Settings
会有一个名为 Profiles: 的部分,其中包含 4 个复选框。确保 Extended Desktop 是唯一选中的一项。【参考方案2】:
没有直接的方法。试试CommandProxy。
请仔细阅读博文。您确实需要创建两个不同的项目:一个本机操作系统可执行文件和一个 AIR 应用程序。本机可执行文件会启动您的 AIR 应用程序。 AIR 应用程序依次请求可执行文件来处理操作系统级别的请求。
从Google Code 下载源代码并创建两个项目——一个用于示例 C# exe 的 Visual Studio/Mono,另一个用于 AIR 应用程序。 Here 是一个描述如何设置前者的链接。
在您的 AIR 应用程序的主 MXML 文件中,您需要执行以下操作:
创建一个CommandProxy
对象,添加一些事件监听器,用于连接检测,Command
响应和错误。
通过connect
调用连接到本机exe
在connect
的事件处理程序中,创建一个新的Command
,例如ScreenshotCommand
并执行它(通过CommandProxy.execute
方法)
...就是这样!
希望这会有所帮助。
【讨论】:
我真的不知道如何让它工作。你有一个工作的例子吗?谢谢 CommandProxy?您面临哪些问题?我没有准备好任何东西,但可以在明天晚些时候试一试。 我只是不知道如何...开始整个事情...使用什么文件..如何正确编译。我真的需要一个来自 AIR 的示例,它在 Windows 上发送诸如“calc”之类的命令。谢谢你! 更新我的帖子。如果您还有其他问题,请告诉我。 这正是发生的事情。【参考方案3】:答案分为两部分。一,如果你真的必须运行一个 .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(例如,播放列表或其他东西)。
祝你好运,谢谢你的问题,这可能是一个骗局,但谷歌只找到了这个问题,所以你赢了:)
【讨论】:
【参考方案4】:我认为 FluorineFx 可以满足您的需求:http://aperture.fluorinefx.com/?p=5
【讨论】:
FlourineFX 是一个网络消息传递网关,与在 Air 中启动本机应用程序无关......【参考方案5】:AIR 2.0 将具有此功能。
预计将在年底(2009 年)推出测试版,并在 2010 年上半年发货。
http://blogs.adobe.com/air/2009/10/previewing_adobe_air_2_at_adob.html
本机进程 API 从 AIR 2 开始,开发人员将可以访问本机进程 API,该 API 将使应用程序能够调用本地计算机上的本机应用程序并与之通信。为了保持 .air 文件格式的跨平台特性,利用本机进程 API 的应用程序必须部署为本机安装程序,例如 .exe 和 .dmg。 AIR 运行时 SDK 将支持生成基本的本机安装程序。
【讨论】:
【参考方案6】:查看这篇博文:Run an exe file from AIR
简短总结:
"如果你真的需要运行外部 exe文件,没有别的办法 解决你的问题,然后你会 确保用户运行 启动之前的另一个软件 AIR 应用程序。”
【讨论】:
【参考方案7】:目前,无法使用 AIR 本地执行此操作。不过也有一些选择:
Shu Red5 在本地主机上运行 创建在用户计算机上运行的服务并使用sockets 连接到它。【讨论】:
【参考方案8】:另一种方法是在本地机器上启动简单的网络服务器(在后台),并使用 HTTPService 调用它的方法。
后台网络服务器可以是例如在 python 中: http://fragments.turtlemeat.com/pythonwebserver.php
它可以启动可执行文件并提供 AIR 无法提供的功能。
这使 Flex 代码保持整洁,因为它只实现了 REST 接口和 python(或其他语言)的其余工作。您还可以从使用 python 作为 sqlite 数据库的接口中受益,或者您可以将整个 django 作为网络服务器启动。
唯一的缺点是服务器必须已经在 localhost 上运行.. 并且正在监听某个端口(即 81)。您可以通过在系统启动时启动服务器来做到这一点。
这不是最好的方法,但在某些情况下,它可以像对我一样帮助您的项目。
【讨论】:
【参考方案9】:在 mac os x 中,如果要启动 .app 文件,则必须为文件路径编写以下内容。 (假设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);
【讨论】:
【参考方案10】:或者简单我的网站为新应用程序创建自定义安装程序阅读更多
http://board.flashkit.com/board/showthread.php?834579-Embed-exe-file-from-swf-to-write-to-local-directory
额外提示: 我们建议您使用 Enigma Virtual Box,因为它是免费的,它非常适合应用程序虚拟化或像 BoxedApp Packer 这样的 Exe-Packer,但它比 Enigma Virtual Box 贵很多谢谢!
【讨论】:
以上是关于Adobe AIR 执行程序的主要内容,如果未能解决你的问题,请参考以下文章