32

我想从 Adob​​e AIR 应用程序中按下一个按钮并执行一些已安装的程序。例如,我会有一个名为“Start Winamp”的按钮。当按下它时,它应该直接启动 Winamp.exe...我不想执行一些命令行的东西,我只想启动一个 exe。或者……是一样的吗?请让我知道这是否可能。

谢谢你。

4

10 回答 10

66

使用 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> 
于 2009-12-17T15:25:43.833 回答
11

没有直接的方法可以做到这一点。试试CommandProxy

非常仔细地阅读博客文章。您确实需要创建两个不同的项目:一个本机操作系统可执行文件和一个 AIR 应用程序。本机可执行文件会启动您的 AIR 应用程序。AIR 应用程序依次请求可执行文件来处理操作系统级别的请求。

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

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

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

  • 通过connect调用连接到本机 exe

  • 在 的事件处理程序中connect,创建一个新的CommandegScreenshotCommand并执行它(通过CommandProxy.execute方法)

……就是这样!

希望这可以帮助。

于 2009-03-23T08:00:36.350 回答
4

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

你可以在 Ruby 中编写一个简单的命令代理,它实际上是跨平台的,并且在大约 5 分钟内非常省事(我刚刚做到了,如果你想要代码在这里评论我,我会发布它)。如果您想在启动后控制该过程,这是一项更严肃的努力。对于分发等,我相信Ruby会更容易。

另一方面检查一下这个想法。Jeff 建议使用来自 AIR 的 URL 请求。基本上,如果您的浏览器能够正确解释它,那么您就可以开始了。代码看起来像这样

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

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

祝你好运,谢谢你的问题,这可能是一个骗局,但谷歌只找到了这个,所以你赢了:)

于 2009-07-20T10:14:38.447 回答
3

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

于 2009-08-05T13:56:22.477 回答
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 将支持生成基本的本机安装程序。

于 2009-11-09T23:10:23.073 回答
1

请参阅此博客文章:从 AIR 运行 exe 文件

简短的摘要:

“如果您确实需要运行外部 exe 文件,并且没有其他方法可以解决您的问题,那么您将确保用户在启动 AIR 应用程序之前运行另一个软件。”

于 2009-03-23T02:23:00.047 回答
1

现在,没有办法用 AIR 原生地做到这一点。不过,有一些选择:

  • Red5在 localhost 上运行
  • 创建一个在用户机器上运行的服务并使用套接字连接到它。
于 2009-03-23T02:26:44.873 回答
1

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

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

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

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

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

这不是最好的方法,但在某些情况下,它可以像对我一样帮助您的项目。

于 2010-02-10T09:22:45.710 回答
0

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

}
于 2013-09-27T13:45:29.263 回答
0

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

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 贵很多谢谢!

于 2015-10-06T17:50:09.150 回答