【问题标题】:Adobe AIR to execute programAdobe AIR 执行程序
【发布时间】:2010-10-14 21:28:35
【问题描述】:

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

谢谢。

【问题讨论】:

  • 无意冒犯,但有人问过了。
  • @Le dorfier,在哪里?我想这是第一次问这个问题。
  • 既然 NativeProcess 存在,您会考虑修改已接受的问题吗?

标签: flash apache-flex air command


【解决方案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&gt;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 贵很多谢谢!

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2010-10-02
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-05-05
                • 1970-01-01
                相关资源
                最近更新 更多